» codelab : http://codelab.fr/accueil » Forum : Processing : http://codelab.fr/processing » [Débutant] Poo : Limites : http://codelab.fr/5258 Ceci est la version imprimable d'un sujet du forum, pour retourner à la version complète : [Débutant] Poo : Limites |
alexis51151 — 2014-09-28 13:41:49 |
Bonjour à tous, Puis avec de la programmation orientée objet : int a = int(random(-5,5)); int b = int(random(-5,5)); infection Infected1 = new infection(600,425,color(255)); void setup() { smooth(); size(1200,850); } void draw() { background(0); noStroke(); Infected1.affichage(); Infected1.bouger(a,b); } class infection { int x; int y; int mouvX; int mouvY; color couleur; infection (int posX, int posY, color nouvCouleur) { x = posX; y = posY; couleur = nouvCouleur; } void affichage() { fill(couleur); ellipse(x,y,20,20); } void bouger( int moveX, int moveY) { if ( x + moveX > width|| x + moveX < 0) { x = x - moveX; } else { x = x + moveX; } if (y + moveY > height || y + moveY < 0) { y = y - moveY; } else { y = y + moveY; } } } Je sais que ma requête peut vous paraître simpliste ( à la vue des sujets bien plus complexes traités sur ce forum), et libre à vous de m'aider, car je reste bloqué sur ce "détail" fonctionnel. |
Mushussu — 2014-09-28 15:17:02 |
Bonjour, int a = int(random(-10, 10)); int b = int(random(-10, 10)); Infection infected1; void setup() { smooth(); size(1200, 850); infected1 = new Infection(600, 425, color(255), a, b); } void draw() { background(0); noStroke(); infected1.affichage(); infected1.bouger(); } class Infection { int x; int y; int mouvX; int mouvY; color couleur; PVector vitesse; Infection (int posX, int posY, color nouvCouleur, int a, int b) { x = posX; y = posY; vitesse = new PVector(a, b); couleur = nouvCouleur; } void affichage() { fill(couleur); ellipse(x, y, 20, 20); } void bouger() { x += vitesse.x; y += vitesse.y; if ((x > width) || (x < 0)) { vitesse.x *= -1; } if ((y > height) || (y < 0)) { vitesse.y *= -1; } } } Il y a une convention typographique en java. On met une majuscule au nom de la classe et pas de majuscule à une instance de celle-ci. |
alexis51151 — 2014-09-28 16:44:38 |
D'abord, merci beaucoup! Cela va me permettre d'avancer. Ensuite, je vais essayer d'analyser toutes les modifications avant de continuer pour bien m’imprégner de la logique du langage et de la technique utilisée. Je ferais attention à la convention typographique, je ne connaissais pas! |
Mushussu — 2014-09-28 19:27:40 |
Non, ton erreur était que tu ne modifiais pas la direction après le rebond. Pour t'exercer, tu peux coder la position comme un PVector. |
fabrice54 — 2014-09-29 05:50:31 |
Bonjour Code (P5) :ArrayList bibittes; ArrayList explosions; void setup() { size(400,400); smooth(); frameRate(20); bibittes = new ArrayList(); explosions = new ArrayList(); for ( int i =0; i < 30; i++ ) { bibittes.add( new Bibitte(random(width),random(height)) ); } } void draw() { background(255); for ( int i =0; i < bibittes.size(); i++ ) { Bibitte bibitte1 = (Bibitte) bibittes.get(i); for ( int j = i+1; j < bibittes.size();j++ ) { Bibitte bibitte2 = (Bibitte) bibittes.get(j); float distance = dist( bibitte1.x , bibitte1.y , bibitte2.x , bibitte2.y ); if ( distance < 20 ) { // Changer la direction des bibittes concernees float angle = atan2( bibitte2.y-bibitte1.y, bibitte2.x-bibitte1.x ); bibitte1.angle = bibitte1.angleCible = angle + PI; bibitte2.angle = bibitte2.angleCible = angle; // Ajouter des explosions int nombreExplosions = floor(random(3,10)); for ( int k =0 ; k < nombreExplosions ; k++ ) { // Trouver le point au centre des deux bibittes concerness float xCentre = bibitte1.x + cos(angle) * 10; float yCentre = bibitte1.y + sin(angle) * 10; Explosion explosion = new Explosion(xCentre, yCentre); explosions.add(explosion); } } } } // Dessiner les bibittes for ( int i =0; i < bibittes.size(); i++ ) { Bibitte b = (Bibitte) bibittes.get(i); b.draw(); } // Dessiner les explosions et les retirer // si elles ont depasse leur duree for ( int i = explosions.size()-1; i >= 0; i-- ) { Explosion e = (Explosion) explosions.get(i); if ( e.draw() == false ) { explosions.remove(i); } } } class Bibitte { float x; float y; float angle; float angleCible; float v; Bibitte(float x, float y) { this.x = x; this.y = y; v = random(2,4); angle = random(PI*2); angleCible = random(PI*2); } void draw() { // Determiner si la bibitte de direction if ( random(100) < 5 ) { angleCible = random(PI*2); } // Deplacer la bibitte float angle_difference = angleCible - angle; angle_difference = angle_difference % (PI * 2); if (angle_difference > PI) { angle_difference = angle_difference- PI * 2; } else if (angle_difference < -PI) { angle_difference = angle_difference + PI * 2; } angle = angle_difference * 0.1 + angle; x = x + cos(angle) * v; y = y + sin(angle) * v; if ( x > width + 10) x = - 10; else if ( x < -10) x = width + 10; else if ( y > height + 10) y = - 10; else if ( y < -10) y = height + 10; // Dessiner la bibitte fill(0); noStroke(); pushMatrix(); translate(x,y); rotate(angle); ellipse(0,0,20,20); translate(7,0); fill(255); stroke(0); ellipse(0,-4,6,6); ellipse(0,4,6,6); popMatrix(); } } class Explosion { float x; float y; color c; float taille; int duree; private int temps; float direction; float vitesse; float rotation; float vitesseRotation; Explosion( float x, float y) { this.x = x; this.y = y; c = color(random(200,256),random(0,256),random(0,30)); taille = random(5,20); duree = floor(random(200,1500)); temps = millis(); direction = random(TWO_PI); vitesse = random(2,6); rotation = random(TWO_PI); vitesseRotation = random(-0.5,0.5); } boolean draw() { if ( millis() - temps > duree ) { return false; } else { x = x + cos(direction) * vitesse; y = y + sin(direction) * vitesse; noStroke(); fill(c); pushMatrix(); translate(x,y); rotation = rotation + vitesseRotation; rotate(rotation); rectMode(CENTER); // Changer la taille selon le temps restant int tempsEcoule = millis() - temps; float tailleCourante = map( tempsEcoule , 0 , duree , taille , 0); rect( 0, 0, tailleCourante, tailleCourante ); popMatrix(); } return true; } } |
alexis51151 — 2014-09-29 18:23:39 |
Merci à toi fabrice54, je vais essayer d'étudier le fonctionnement du programme pour pouvoir m'en inspirer, même si l'histoire des angles me rebute un peu à première vue, ayant une tête plutôt les vecteurs. |
fabrice54 — 2014-09-30 05:00:39 |
Bonjour. Code (P5) :ParticleSystem ps; void setup() { size(640,360); ps = new ParticleSystem(new PVector(width/2,50)); } void draw() { background(0); ps.addParticle(); ps.run(); } // A simple Particle class class Particle { PVector location; PVector velocity; PVector acceleration; float lifespan; Particle(PVector l) { acceleration = new PVector(0,0.05); velocity = new PVector(random(-1,1),random(-2,0)); location = l.get(); lifespan = 255.0; } void run() { update(); display(); } // Method to update location void update() { velocity.add(acceleration); location.add(velocity); lifespan -= 1.0; } // Method to display void display() { stroke(255,lifespan); fill(255,lifespan); ellipse(location.x,location.y,8,8); } // Is the particle still useful? boolean isDead() { if (lifespan < 0.0) { return true; } else { return false; } } } // A class to describe a group of Particles // An ArrayList is used to manage the list of Particles class ParticleSystem { ArrayList<Particle> particles; PVector origin; ParticleSystem(PVector location) { origin = location.get(); particles = new ArrayList<Particle>(); } void addParticle() { particles.add(new Particle(origin)); } void run() { for (int i = particles.size()-1; i >= 0; i--) { Particle p = particles.get(i); p.run(); if (p.isDead()) { particles.remove(i); } } } } Processing was initiated by |
fabrice54 — 2014-09-30 05:17:18 |
Un arrayList simple qui met une balle quant tu appui sur la souris. Code (P5) :ArrayList particles; void setup() { size(200, 400); particles = new ArrayList(); smooth(); } void draw() { background(255); // must cycle through ArrayList backwards, because // removing objects in the middle for (int i=particles.size()-1; i>=0; i--) { Particle p = (Particle) particles.get(i); p.run(); p.gravity(); p.display(); // check to see if particle has fallen off screen // if so, remove it from the ArrayList if (p.y>height) { particles.remove(i); } } println(particles.size()); } // add a new particle each time the mouse is pressed void mousePressed() { particles.add(new Particle()); } class Particle { float x; float y; float xspeed; float yspeed; Particle() { x = mouseX; y = mouseY; xspeed = random(-1, 1); yspeed = random(-3, 0); } void run() { x = x + xspeed; y = y + yspeed; } void gravity() { yspeed += 0.05; } void display() { stroke(0); fill(0, 75); ellipse(x, y, 10, 10); } } |
alexis51151 — 2014-10-05 16:48:15 |
J'ai étudié les deux codes que tu m'as mis à disposition afin d'essayer de comprendre la fonction ArrayList. int a,b; Infection infected1; void setup() { smooth(); size(1200, 850); infected1 = new Infection(600, 425, color(255), a, b); } void draw() { background(0); noStroke(); infected1.affichage(); infected1.bouger(); } class Infection { int x; int y; int mouvX; int mouvY; color couleur; PVector vitesse; Infection (int posX, int posY, color nouvCouleur, int a, int b) { x = posX; y = posY; vitesse = new PVector(int(random(-10, 10)), int(random(-10, 10))); couleur = nouvCouleur; } void affichage() { fill(couleur); ellipse(x, y, 20, 20); } void bouger() { x += vitesse.x; y += vitesse.y; if ((x > width) || (x < 0)) { vitesse.x *= -1; } if ((y > height) || (y < 0)) { vitesse.y *= -1; } } } class InfectionSystem { ArrayList<Infection> infected; PVector coordX; PVector coordY; InfectionSystem(PVector locationX, PVector locationY) { coordX = locationX.get(); coordY = locationY.get(); infected = new ArrayList<Infection>(); } void addInfection() { infected.add(new Infection(coordX,coordY)); } void afficher() { for (int i = 0; i < infected.size(); i++) { Infection in = infected;get(i); in.afficher(); } } } Je cherche avant tout à comprendre mon erreur, et je ne veux donc pas un code tout refait... mais plutôt des explications qui me permettront d'avancer, et ainsi de devenir autonome dans la poursuite de mon travail. |
Mushussu — 2014-10-05 20:28:25 |
Bonsoir, for (int i = 0; i < tab.size(); i++) { MaClasse instance = tab.get(i); ... } La méthode get extrait l'élément avec comme indice i. for (MaClasse instance : tab) { ... } Tu peux consulter les différentes méthodes des ArryList ici : int a, b; Infection infected1; void setup() { smooth(); size(1200, 850); infected1 = new Infection(600, 425, color(255), a, b); } void draw() { background(0); noStroke(); infected1.affichage(); infected1.bouger(); } class Infection { int mouvX; int mouvY; color couleur; PVector position, vitesse; Infection (int posX, int posY, color nouvCouleur, int a, int b) { position = new PVector(posX, posY); vitesse = new PVector(int(random(-10, 10)), int(random(-10, 10))); couleur = nouvCouleur; } void affichage() { fill(couleur); ellipse(position.x, position.y, 20, 20); } void bouger() { position.add(vitesse); if ((position.x > width) || (position.x < 0)) { vitesse.x *= -1; } if ((position.y > height) || (position.y < 0)) { vitesse.y *= -1; } } } class InfectionSystem { ArrayList<Infection> infected; PVector coordX; PVector coordY; InfectionSystem(PVector locationX, PVector locationY) { coordX = locationX.get(); coordY = locationY.get(); infected = new ArrayList<Infection>(); } void addInfection() { infected.add(new Infection(coordX, coordY)); } void afficher() { for (int i = 0; i < infected.size (); i++) { Infection in = infected.get(i); in.afficher(); } } } |
fabrice54 — 2014-10-06 06:03:33 |
Bonjour. Code (P5) :ArrayList<Balle> maBalle; int nbBalle=3; void setup() { size(500, 500); smooth(); maBalle = new ArrayList<Balle>(); for (int i=0; i<nbBalle; i++) { maBalle.add(new Balle()); } } void draw() { background(255); for(int i = 0; i < maBalle.size(); i++) { Balle b = maBalle.get(i); b.rebond(); b.display(); b.deplacement(); } } void mousePressed(){ maBalle.add(new Balle()); } class Balle { PVector position; PVector deplacement; PVector diametre; color couleur; Balle() { position=new PVector(random(0,width),random(0,height)); deplacement=new PVector(random(-2,2),random(-2,2)); diametre=new PVector(random(10,50),random(10,50)); couleur=color(random(0,255),random(0,255),random(0,255)); } void deplacement(){ position.add(deplacement); } void rebond() { //detection des murs if (position.x < 0 ||position. x >= width) { deplacement.x=deplacement.x*-1; } if (position.y < 0 ||position. y >= height) { deplacement.y=deplacement.y*-1; } } void display(){ fill(couleur); ellipse(position.x,position.y,diametre.x,diametre.y); } } |
fabrice54 — 2014-10-06 09:05:09 |
Explication sur la fonction get. |
alexis51151 — 2014-10-06 14:29:19 |
J'ai enfin réussi ce que je souhaitais obtenir! Je me suis inspiré de la balle, et en ayant vraiment compris le but du ArrayList (merci à vous deux :) ), j'ai pu produire un code fonctionnel, qui reste à améliorer ( je tenterai de l'optimiser demain) : Infection infected1; int nbInfected = 10; ArrayList<Infection> infected; void setup() { smooth(); size(1200, 850); infected1 = new Infection(600, 425, color(255)); infected = new ArrayList<Infection>(); } void draw() { background(0); noStroke(); infected1.affichage(); infected1.bouger(); ajouter(); former(); } class Infection { int mouvX; int mouvY; color couleur; PVector position, vitesse; Infection (int posX, int posY, color nouvCouleur) { position = new PVector(posX, posY); vitesse = new PVector(int(random(-10, 10)), int(random(-10, 10))); couleur = nouvCouleur; } void affichage() { fill(couleur); ellipse(position.x, position.y, 20, 20); } void bouger() { position.add(vitesse); if ((position.x > width) || (position.x < 0)) { vitesse.x *= -1; } if ((position.y > height) || (position.y < 0)) { vitesse.y *= -1; } } } void ajouter() { for (int i=0; i < nbInfected; i++) { infected.add( new Infection(int(random(0,1000)),int(random(0,800)), color(255))); } } void former() { for (int i=0; i < nbInfected; i++) { Infection in = infected.get(i); in.affichage(); in.bouger(); } } Il ne me reste plus qu'à apprendre par moi-même les équations différentielles (j'ai déjà a peu près compris) et à l'appliquer pour la modélisation, et je serai capable de finaliser mon projet. Je vais m'atteler à la présentation de l'interface maintenant, en mettant quelques exemple en plus. |
Mushussu — 2014-10-06 15:27:44 |
Bonjour, int nbInfected = 10; ArrayList<Infection> infected; void setup() { smooth(); size(1200, 850); infected = new ArrayList<Infection>(); ajouter(nbInfected); } void draw() { background(0); noStroke(); former(); } class Infection { color couleur; PVector position, vitesse; Infection (int posX, int posY, color nouvCouleur) { position = new PVector(posX, posY); vitesse = new PVector(int(random(-10, 10)), int(random(-10, 10))); couleur = nouvCouleur; } void affichage() { fill(couleur); ellipse(position.x, position.y, 20, 20); } void bouger() { position.add(vitesse); if ((position.x > width) || (position.x < 0)) { vitesse.x *= -1; } if ((position.y > height) || (position.y < 0)) { vitesse.y *= -1; } } } void ajouter(int nombreElements) { for (int i=0; i < nombreElements; i++) { infected.add( new Infection(int(random(0, 1000)), int(random(0, 800)), color(255))); } } void former() { for (int i=0; i < infected.size(); i++) { Infection in = infected.get(i); in.affichage(); in.bouger(); } } |
fabrice54 — 2014-10-07 04:37:50 |
Content que cela ai pus t'aider; je te fais parvenir un petit programme dont tu peux t'inspirer pour continuer ton programme . Code (P5) :int nb=10; Balle[]balle=new Balle[nb]; void setup() { size(800, 700); for (int i=0;i<nb;i++) { balle[i]=new Balle(random(width), random(height), -1, 1); } } void draw() { background(255); for (int i=0;i<nb;i++) { balle[i].rebondir(); balle[i].bouger(); } for (int i=0;i<nb;i++) { for (int j = i + 1 ; j < nb; j++) { balle[i].collision(balle[j]); } } for (int i=0;i<nb;i++) { balle[i].afficher(); } } class Balle { PVector position; PVector deplacement; int rayon; boolean bing; Balle(float px, float py, float dx, float dy) { position = new PVector(px, py); deplacement=new PVector (dx, dy); rayon = 20; } void rebondir() { bing = false; if (position.x > width|| position.x < 0) { deplacement.x=deplacement.x*-1; } if (position.y >height||position.y<0) { deplacement.y= deplacement.y* -1; } } void bouger() { position.add(deplacement); } void collision(Balle j) { float distance = position.dist(j.position); if (distance<40) { bing = true; j.bing = true; } } void afficher() { if (bing) { fill(255, 0, 255); } else { fill(0, 255, 255); } ellipse(position.x, position.y, 40, 40); } } |
fabrice54 — 2014-10-07 07:21:32 |
voici une syntaxe pour la programmation des arrayList pour comparer tes virus. |
Mushussu — 2014-10-07 09:54:48 |
Le sujet des collisions à déjà été traité sur le forum : |
alexis51151 — 2014-10-08 13:18:34 |
Ah oui, je reconnais les intervenants :) |
fabrice54 — 2014-10-09 04:18:29 |
Bonjour. Code (P5) :ArrayList<Balle> maBalle; int nbBalle=10; void setup() { size(500, 500); smooth(); maBalle = new ArrayList<Balle>(); for (int i=0; i<nbBalle; i++) { maBalle.add(new Balle()); } } void draw() { background(255); for(int i = 0; i < maBalle.size(); i++) { Balle b = maBalle.get(i); b.rebond(); b.deplacement(); } for(int i=0;i<maBalle.size();i++){ Balle pi=maBalle.get(i); for(int j=i+1;j<maBalle.size();j++){ Balle pj=maBalle.get(j); maBalle.get(i).collision(maBalle.get(j)); } } } void mousePressed(){ maBalle.add(new Balle()); } class Balle { PVector position; PVector deplacement; PVector diametre; color couleur; Balle() { position=new PVector(random(0,width),random(0,height)); deplacement=new PVector(random(-2,2),random(-2,2)); diametre=new PVector(30,30); couleur=color(random(0,255),random(0,255),random(0,255)); } void deplacement(){ position.add(deplacement); } void rebond() { //detection des murs if (position.x < 0 ||position. x >= width) { deplacement.x=deplacement.x*-1; } if (position.y < 0 ||position. y >= height) { deplacement.y=deplacement.y*-1; } } void collision(Balle j){ float distance=position.dist(j.position); if(distance<20){ print(distance," "); } else{ fill(255,0,255); } ellipse(position.x,position.y,diametre.x,diametre.y); } } |
alexis51151 — 2014-10-12 08:20:53 |
J'ai réfléchis sur la contamination, et j'ai complétement compris l'idée de vérifier pour chaque "balle" au départ la distance vis-à-vis des autres avec 2 boucles, ça devrait donc être fait rapidement! |
fabrice54 — 2014-10-13 05:22:08 |
Tu verras dans le dernier programme que je t'ais fais parvenir il y a des erreurs.C'est au niveau de la syntaxe.Je pense que c'est quelque chose comme ça" maBalle.(get i).couleur=color(0,255,0)"ceci est pour le changement de couleur après collision.D'autre part la ligne " maBalle.get(i).collision(maBalle.get(j)); "dois être douteuse cette ligne permet de passer au sous_programme collision mais je n'en connais pas trop la syntaxe ;car je n'ais pas trouvez d'exemple de programme arrayList avec des vecteurs . |
alexis51151 — 2014-10-13 15:50:54 |
J'ai réussi à faire ça, mais j'ai dû me tromper à un endroit... void comparer() { for (int i=0; i < infected.size(); i++) { Infection ip = infected.get(i); for (int j=1; j < infected.size(); j++) { Infection je = infected.get(j); if (dist(ip.position.x,ip.position.y,je.position.x,je.position.y) < 20) { ip.couleur = color(255,0,0); } } } } PS : L'arborescence de mon programme était ainsi : je prends un objet dans le tableau, je le compare à tous les autres objets présents dans le tableau, ainsi que leur distance. Si elle est inférieure à 20 (la moitié du cercle), et qu'il se touche donc, le deuxième objet (donc ici je) devient rouge. |
Mushussu — 2014-10-13 20:38:22 |
C'est bien tu avances. void comparer() { for (int i = 0; i < infected.size () - 1; i++) { Infection ip = infected.get(i); for (int j = i + 1; j < infected.size (); j++) { Infection je = infected.get(j); if (PVector.dist(ip.position, je.position) < 20) { ip.bing = true; je.bing = true; } } } } class Balle { boolean bing; Balle() { bing = false; } void afficher() { if (bing) { fill(255, 0, 0); } else { fill(couleur); } ellipse(position.x, position.y, 2 * rayon, 2 * rayon); bing = false; } } |
fabrice54 — 2014-10-14 05:50:06 |
Boonjour. |
fabrice54 — 2014-10-14 06:34:50 |
Re. Code (P5) :ArrayList<Balle> maBalle; int nbBalle=10; void setup() { size(500, 500); smooth(); maBalle = new ArrayList<Balle>(); for (int i=0; i<nbBalle; i++) { maBalle.add(new Balle()); } } void draw() { background(255); for(int i = 0; i < maBalle.size(); i++) { Balle b = maBalle.get(i); b.rebond(); b.deplacement(); b.comparer(); b.display(); } } void mousePressed(){ maBalle.add(new Balle()); } class Balle { PVector position; PVector deplacement; PVector diametre; color couleur; boolean bing; Balle() { position=new PVector(random(0,width),random(0,height)); deplacement=new PVector(random(-2,2),random(-3,3)); diametre=new PVector(30,30); couleur=color(0); bing=false; } void deplacement(){ position.add(deplacement); } void rebond() { //detection des murs if (position.x < 0 ||position. x >= width) { deplacement.x=deplacement.x*-1; } if (position.y < 0 ||position. y >= height) { deplacement.y=deplacement.y*-1; } } void comparer(){ for(int i=0;i<maBalle.size();i++){ Balle pi=maBalle.get(i); for(int j=i+1;j<maBalle.size();j++){ Balle pj=maBalle.get(j); float distance=pi.position.dist(pj.position); if(distance<20){ pi.bing=true; pj.bing=true; } } } } void display(){ if (bing) { fill(255, 0, 0); } else { fill(couleur); } ellipse(position.x,position.y,diametre.x,diametre.y); } } |
Mushussu — 2014-10-14 09:25:30 |
J'avais fait une petite erreur d'inattention comme le code n'était pas complet : if (PVector.dist(ip.position, je.position) < 20) { |
fabrice54 — 2014-10-15 05:38:37 |
Bonjour . |
alexis51151 — 2014-10-15 20:27:29 |
J'ai utilisé un boolean comme recommandé, mais je n'ai pas encore le résultat escompté. Je vais travailler sur un code pour que la balle devienne rouge uniquement si celle qui la touche est rouge. Je vous tiens au courant. |
Mushussu — 2014-10-15 20:32:50 |
D'accord, je comprend la contagion, dans ce que je proposais, c'était pour indiquer une collision. Tu peux créer une variable booléenne contamine : boolean contamine; Quand une boule "heurte" une autre si elle est contaminée alors elle devient contaminée. |
alexis51151 — 2014-10-16 16:58:18 |
Oui, j'avais justement rajouté une booléenne sur le modèle de bing avec cet effet, reste à faire une syntaxe viable. |
alexis51151 — 2014-10-20 14:51:36 |
J'ai continué le projet et ait réussi un assez bon programme qui semble fonctionner : void contamination() { for (int k = 0; k < nbContamine;k++) { Infection cont = infected.get(k); cont.contamine = true; cont.couleur = color(255,0,0); } } et dans le sous-onglet de la class Infected, j'ai rajouté ça : class Infection { color couleur; PVector position, vitesse; boolean bing, contamine; Infection (int posX, int posY, color nouvCouleur) { position = new PVector(posX, posY); vitesse = new PVector(int(random(-10, 10)), int(random(-10, 10))); couleur = nouvCouleur; bing = false; contamine = true; } void affichage() { if (bing == true && contamine == true) { fill(255,0,0); } else { fill(couleur); } ellipse(position.x, position.y, 20, 20); } Je pressens que mon professeur va me dire que mes fonctions n'ont pas vraiment des noms adaptés, il faudra que je pense à les modifier pour que les autres personnes sur le projet puissent s'y retrouver quand je leur expliquerai ^^. |
Mushussu — 2014-10-20 15:09:12 |
C'est chouette que tu arrives à quelque chose qui te convienne. Ce serait bien que tu postes sur le forum ton code sous la forme d'un fichier zip, pour que d'autre personne puisse s'en inspirer. |
alexis51151 — 2014-10-21 15:07:58 |
Oui, dès que j'aurai fini mon projet, je le posterai en intégralité pour qu'on s'en inspire. |
Mushussu — 2014-10-30 15:01:48 |
Bonjour, void bouger(int bordGauche, int bordHaut, int bordDroit, int bordBas); Cela s'appelle la surcharge de méthode. Le programme suivant que tu passes ou non des arguments dans ta méthode choisira l'une ou l'autre. |
alexis51151 — 2014-10-31 18:09:50 |
Merci pour ton aide. J'avais hier supprimé mon message car j'ai trouvé la solution après de multiples essais, d'où mon soulagement. On peut observer que le bouton est prêt. Le problème ici est que je ne peux pas exécuter le programme à cause d'une erreur : "Cannot find a class or type named Cadre". Pour résoudre ce problème, j'ai passé la classe "Cadre" en public class, sans aucune amélioration. J'avais auparavant enlevé la déclaration d'un objet pour chacune de ces classes, car processing ne les trouvaient pas, avec le même message d'erreur. Onglet Infection : J'ai observé la forme de la fonction bouger que tu me proposes, je vais voir si je la mets ou non demain. |
Mushussu — 2014-10-31 23:53:55 |
Bonsoir, |
alexis51151 — 2014-11-01 08:57:00 |
Bonjour, |
Mushussu — 2014-11-01 13:07:42 |
C'est une bonne idée de créer une classe pour un nouvel objet qui serait un champ de saisie. Input(int posX, int posY, int longRect, int largRect) { N'hésite pas à créer des onglets, un onglet par classe. |
alexis51151 — 2014-11-02 08:47:24 |
Bonjour, j'ai analysé ton code sur Labomedia, et pense l'avoir compris dans l'ensemble. Il me reste une zone de flou : les getX(), getAction()... ont-ils été déclarés auparavant dans le programme ? Car ils ne semblent pas être reconnus par processing. Dois-je alors importer une librairie ? void mousePressed() { if ((mouseX > 960) && (mouseX < 1190) && (mouseY > 120) && (mouseY < 220)) { if (c.isShowing()) { c.setVisible(false); } else { c.setVisible(true); } } } J'ai compris que la fonction isShowing() renvoyait l'état de l'objet selon deux attributs -> est-il ou non visible. import java.lang.Object; Question : Est-il utile ou déjà incorporé à processing ? |
Mushussu — 2014-11-02 11:41:50 |
Bonjour, Donc si la fenêtre est ouverte, elles se ferme |
alexis51151 — 2014-11-03 15:24:24 |
Bonjour, Merci pour l'aide. |
Mushussu — 2014-11-03 20:49:33 |
C'est un but tout à fait louable de franciser ton application, mais dans ce cas là ce n'est pas approprié. Les méthodes doivent être celles définies par Processing. |
alexis51151 — 2014-11-05 15:08:35 |
Bonjour, Désormais, je souhaite ajouter un input dans ma seconde fenêtre. Je vais donc dans le setup() de la seconde fenêtre et ajoute ceci : public class SecondeFenetre extends PApplet { public void setup() { size(400, 300); entree = new Input(this,100,100,100,100,color(255,0,0)); noLoop(); } public void draw() { } } Je remarque lorsque je fais certaines manipulations tout en positionnant l'input dans l'Applet SecondeFenetre qu'il est toujours par rapport à l'Applet principal car il se positionne par rapport à celle-ci. |
Mushussu — 2014-11-06 16:36:19 |
Il ne faut pas croiser les effluves. c'est mal. public class SecondeFenetre extends PApplet { Input entree; public void setup() { size(400, 300); entree = new Input(this, 100, 100, 100, 100, color(255, 0, 0)); noLoop(); } public void draw() { } public class Input { ... } } Petite remarque, je viens de découvrir que la méthode registerDraw() était dépréciée. Il faut remplacer : page.registerDraw(this); par page.registerMethod("draw", this); |
alexis51151 — 2014-11-11 09:52:44 |
Bonjour, |
Mushussu — 2014-11-11 10:20:15 |
Bonjour, public void keyEvent(processing.event.KeyEvent evenement) { if (curseur && (evenement.getAction() == KeyEvent.PRESS)) { taper = taper + evenement.getKey(); if (evenement.getKey() == RETURN) { sauvegarder = taper; taper = ""; } } } |
alexis51151 — 2014-11-11 14:35:22 |
Ah d'accord! J'avais tenté de remédier à ce problème avec le "switch" mais il me paraissait trop complexe pour mon usage. Ceci explique donc cela. Merci pour ton aide. |
alexis51151 — 2014-11-15 17:38:21 |
Bonsoir, |
Mushussu — 2014-11-15 20:21:36 |
Bonjour, |
alexis51151 — 2014-11-16 08:11:23 |
Oui, en effet. J'ai déjà la méthode ajouter(), mais le problème est que lorsque je choisis le nombre de balles, le programme s'est déjà lancé. Je pensais, comme toi d'après ce que j'ai compris, que le nombre de balles serait modifié, mais ce n'est pas le cas. void setup() { time1 = second(); frameRate(100); smooth(); size(1200, 850); infected = new ArrayList<Infection>(); ajouter(nbInfected); ajouter(int(sauvegarder)); c = new Cadre(); c.setTitle("Panneau de configuration"); } public void keyEvent(processing.event.KeyEvent evenement) { if (curseur && (evenement.getAction() == KeyEvent.PRESS)) { if (taper.length() < 4) { taper = taper + evenement.getKey(); } if (evenement.getKey() == ENTER) { sauvegarder = taper; taper = ""; int(sauvegarder); println(sauvegarder); } } } |
Mushussu — 2014-11-16 10:41:09 |
OK, j'ai compris ton erreur. Effectivement il ne suffit pas de changer la variable pour que le nombre de balles évolue. Quand le la touche ENTER est pressée il faut faire appel à une méthode pour ajouter des balles. public void keyEvent(processing.event.KeyEvent evenement) { if (curseur && (evenement.getAction() == KeyEvent.PRESS)) { if (evenement.getKey() == ENTER) { ajouter(Integer.parseInt(taper)); println(taper); taper = ""; return; } if ((taper.length() < 4) && (evenement.getKey() >= 48) && (evenement.getKey() <= 57)) { taper = taper + evenement.getKey(); } } } Je fais appel à la méthode ajouter(), ce qui n'est pas optimal. Dans ce genre de problème, il est utile de créer une classe qui serait le système de balles avec les méthodes afférentes qui servent à gérer l'ajout et la suppression des balles. On peut ainsi facilement passer l'unique instance de cette en paramètres dans les méthodes des autres classes. |
alexis51151 — 2014-11-16 11:29:07 |
Merci! Je comprends donc que le getKey() entre 48 et 57 correspond aux chiffres, ce que je cherchais depuis longtemps! Je vais désormais utiliser le code que tu m'as conseillé pour enlever des balles, ainsi qu'une rapide recherche pour connaître des correspondances en getKey de certains caractères. |
Mushussu — 2014-11-16 11:31:22 |
Oui, pardon, j'ai été un peu vite getKey() renvoie un char. Or les chiffres sont codés dans la table ASCII de 48 à 57 : |
alexis51151 — 2014-11-23 08:16:32 |
J'achève la partie ajouter/enlever des balles de mon programme mais je tombe sur un autre problème : lorsqu'il s'agit d'enlever une balle, si l'on enlève plus de balles qu'il n'y en a, j'ai une erreur (ce qui est logique somme toute). |
Mushussu — 2014-11-23 18:46:54 |
Bonsoir, |