Bonjours tout le monde, alors voila mon petit problème :
j'ai crée un compteur qui marche très bien
void compteur() { compteur = compteur + 0.01; fill(255); text(compteur, 410,30);
j'aimerai grâce a lui réussir a augmenter le nombre de bal qui apparaît
par exemple lorsque la valeur du compteur affiche 50,00 j'aimerai qu'il rajoute une balle
j'ai declarer au debut que le nombre de balles etait de 2
j'ai donc ecrit dans mon setup :
if (compteur >= 1.0){ nbreMeteorite = 3; }
Mon code ne marche apparement pas, si vous pouviez m'eclairer ! Merci beaucoup:D
----------------------------------------------------------------------------
code complet
Clo monClo; float x = 250; float y = 350; float vitesseX; float vitesseY; PImage clo, ovni, ile; boolean intro; float b=40 ; float sens=1; int initial = 1; int nbreMeteorite = 2; Meteorite[] meteorites = new Meteorite[nbreMeteorite]; int vie = 3; PFont police; float compteur = 0; void setup() { smooth(); size(500, 750); clo = loadImage("clo.gif"); ovni = loadImage("OVNI.gif"); ile = loadImage("meteorite.gif"); monClo = new Clo(250, -175, color(255)); intro = true; for (int i = 0; i < nbreMeteorite; i++) { meteorites[i] = new Meteorite(width/2, 780); } if (compteur >= 1.0){ nbreMeteorite = 3; } police = loadFont("BookmanOldStyle-Italic-20.vlw"); } void draw() { if (intro) { // Intro background(0, 0, 30); fill(0, 0, 0, 100); rect(0, 0, 500, 750); fill(250, 250, 200); ellipse(random(500), random(750), random(7), random(7)); noStroke(); fill(0); //tant que intial =1 // si y <200 descendre le bonhomme // sinon initial = 0 // si initial =0 monClo.bouge(); intro = monClo.testCollision(); monClo.display(); if ((b>100)||(b<40)) { sens= 0; } imageMode(CENTER); image(ovni, 250, 45, b*2, b); b = b + sens; // intro = flase; // Quand l'intro se termine } else { // Jeu background(0, 0, 30); fill(0, 0, 0, 100); rect(0, 0, 500, 750); fill(250, 250, 200); ellipse(random(500), random(750), random(7), random(7)); smooth(); noStroke(); fill(0); if (x > 530) { x=x-555; } if (x < -30) { x=x +555; } if (y > 780) { y=y-785; } if (y < -30) { y=y +785; } keyPressed(); imageMode(CENTER); image(clo, x, y, 125, 200); for (int i = 0; i < nbreMeteorite; i++) { meteorites[i].bouge(); meteorites[i].testCollision(); meteorites[i].display(); } //barre evolution fill(255); rect(0,0,499,50); fill(0); rect(3,3,493,44); // score textFont(police,15); fill(250); text("SCORE :", 350, 30); vie(); compteur(); } } void keyPressed() { if (key == CODED) { if (keyCode == LEFT) x = x - vitesseX; if (keyCode == RIGHT) x = x + vitesseX; if (keyCode == UP) y = y - vitesseY; if (keyCode == DOWN) y = y + vitesseY; vitesseX = 3; vitesseY = 3; } } class Meteorite { float w; float z; float vitesseW; //AJOUT float vitesseZ; //AJOUT Meteorite (float nouvW, float nouvZ) { w = nouvW; z = nouvZ; vitesseW = 2 + random(-1,1); vitesseZ = 2 + random(-1,1); } void display() { image(ile, w, z, 40, 40); } void bouge() { w = w + vitesseW; z = z + vitesseZ; } void testCollision() { //Si la balle touche un mur, elle rebondit if (w > width-20 || w < 20) { vitesseW = vitesseW * -1; } if (z > 780) { vitesseZ = vitesseZ * -1; } if (z <0) { z=z + 780; } } } class Clo { float x; float y; float vitesseX; float vitesseY; color couleur; Clo (float nouvX, float nouvY, color nouvCouleur) { x = nouvX; y = nouvY; couleur = nouvCouleur; vitesseX = 2; vitesseY = 2; } void display() { fill(0); image(clo, x, y, 125, 200); } void bouge() { y = y + vitesseY; } boolean testCollision() { //Si la balle touche une mur, elle rebondit if (y > 350 ) { vitesseY = 0; return false; } else { return true; } } } void vie(){ fill(205,0,0); ellipse(15,20,19,15); fill(205,0,0); ellipse(30,20,19,15); fill(205,0,0); triangle(6, 23, 39, 23, 23, 35); fill(205,0,0); ellipse(53,20,19,15); fill(205,0,0); ellipse(68,20,19,15); fill(205,0,0); triangle(44, 23, 77, 23, 60, 35); fill(205,0,0); ellipse(91,20,19,15); fill(205,0,0); ellipse(106,20,19,15); fill(205,0,0); triangle(82, 23, 115, 23, 98, 35); } void compteur() { compteur = compteur + 0.01; fill(255); text(compteur, 410,30); }
Hors ligne
Bonsjours...
Le setup() est conçu pour n'est lu qu'une seule fois...
Si tu y places ton if, il ne sera évalué qu'une seule fois, au lancement du sketch.
Il faut donc que ta condition se trouve dans le draw() pour qu'elle puisse être évaluée avec les valeurs grandissantes du compteur.
Juste pour info :
compteur = compteur + 0.01
et
compteur += 0.01
sont des notations équivalentes.
Bon courage...
Hors ligne
Bonsoir,
Les tableaux ne sont pas adaptés à ce que tu souhaites faire. Normalement ils sont de tailles fixes. Les Arraylist sont idéaux pour ajouter et soustraire des objets.
J'ai adapté ton code pour l'ajout de météorites. J'ai placé la limite à 3 pour que cela aille plus vite pour les tests :
Clo monClo; float x = 250; float y = 350; float vitesseX; float vitesseY; PImage clo, ovni, ile; boolean intro; float b=40 ; float sens=1; int initial = 1; int nbreMeteorite = 2; ArrayList<Meteorite> meteorites; int vie = 3; PFont police; float compteur = 0; int limite = 3; // Ou 50 void setup() { smooth(); size(500, 750); clo = loadImage("clo.gif"); ovni = loadImage("OVNI.gif"); ile = loadImage("meteorite.gif"); monClo = new Clo(250, -175, color(255)); intro = true; meteorites = new ArrayList<Meteorite>(); for (int i = 0; i < nbreMeteorite; i++) { meteorites.add(new Meteorite(width/2, 780)); } police = loadFont("Verdana-Italic-20.vlw"); } void draw() { if (intro) { // Intro background(0, 0, 30); fill(0, 0, 0, 100); rect(0, 0, 500, 750); fill(250, 250, 200); ellipse(random(500), random(750), random(7), random(7)); noStroke(); fill(0); //tant que intial =1 // si y <200 descendre le bonhomme // sinon initial = 0 // si initial =0 monClo.bouge(); intro = monClo.testCollision(); monClo.display(); if ((b>100)||(b<40)) { sens= 0; } imageMode(CENTER); image(ovni, 250, 45, b*2, b); b = b + sens; // intro = flase; // Quand l'intro se termine } else { // Jeu background(0, 0, 30); fill(0, 0, 0, 100); rect(0, 0, 500, 750); fill(250, 250, 200); ellipse(random(500), random(750), random(7), random(7)); smooth(); noStroke(); fill(0); if (x > 530) { x=x-555; } if (x < -30) { x=x +555; } if (y > 780) { y=y-785; } if (y < -30) { y=y +785; } keyPressed(); imageMode(CENTER); image(clo, x, y, 125, 200); for (Meteorite m:meteorites) { m.bouge(); m.testCollision(); m.display(); } //barre evolution fill(255); rect(0, 0, 499, 50); fill(0); rect(3, 3, 493, 44); // score textFont(police, 15); fill(250); text("SCORE :", 350, 30); vie(); compteur(); if ((compteur - limite * meteorites.size()) > limite) { meteorites.add(new Meteorite(width/2, 780)); println(meteorites.size()); } } } void keyPressed() { if (key == CODED) { if (keyCode == LEFT) x = x - vitesseX; if (keyCode == RIGHT) x = x + vitesseX; if (keyCode == UP) y = y - vitesseY; if (keyCode == DOWN) y = y + vitesseY; vitesseX = 3; vitesseY = 3; } } class Meteorite { float w; float z; float vitesseW; //AJOUT float vitesseZ; //AJOUT Meteorite (float nouvW, float nouvZ) { w = nouvW; z = nouvZ; vitesseW = 2 + random(-1, 1); vitesseZ = 2 + random(-1, 1); } void display() { image(ile, w, z, 40, 40); } void bouge() { w = w + vitesseW; z = z + vitesseZ; } void testCollision() { //Si la balle touche un mur, elle rebondit if (w > width-20 || w < 20) { vitesseW = vitesseW * -1; } if (z > 780) { vitesseZ = vitesseZ * -1; } if (z <0) { z=z + 780; } } } class Clo { float x; float y; float vitesseX; float vitesseY; color couleur; Clo (float nouvX, float nouvY, color nouvCouleur) { x = nouvX; y = nouvY; couleur = nouvCouleur; vitesseX = 2; vitesseY = 2; } void display() { fill(0); image(clo, x, y, 125, 200); } void bouge() { y = y + vitesseY; } boolean testCollision() { //Si la balle touche une mur, elle rebondit if (y > 350 ) { vitesseY = 0; return false; } else { return true; } } } void vie() { fill(205, 0, 0); ellipse(15, 20, 19, 15); fill(205, 0, 0); ellipse(30, 20, 19, 15); fill(205, 0, 0); triangle(6, 23, 39, 23, 23, 35); fill(205, 0, 0); ellipse(53, 20, 19, 15); fill(205, 0, 0); ellipse(68, 20, 19, 15); fill(205, 0, 0); triangle(44, 23, 77, 23, 60, 35); fill(205, 0, 0); ellipse(91, 20, 19, 15); fill(205, 0, 0); ellipse(106, 20, 19, 15); fill(205, 0, 0); triangle(82, 23, 115, 23, 98, 35); } void compteur() { compteur = compteur + 0.01; fill(255); text(compteur, 410, 30); }
Hors ligne
Merci beaucoup d'avoir modifié mon programme pour qu'il marche mais si vous pouviez m'expliquer comment le code fonctionne car j'aimerais qu'il n'y est qu'une seul balle qui apparaisse et non pas plusieurs à la suite comme dans celui que vous m'avez donné !
principalement cette partie la :
if ((compteur - limite * meteorites.size()) > limite) { meteorites.add(new Meteorite(width/2, 780)); println(meteorites.size()); }
Merci encore
Hors ligne
Si tu souhaites seulement la création d'une météorite supplémentaire :
if ((compteur > limite) && (meteorites.size() == 2)) { meteorites.add(new Meteorite(width/2, 780)); }
Mon test du post précédent est semblable à un pouième près à :
if (compteur / limite > meteorites.size()) { meteorites.add(new Meteorite(width/2, 780)); }
A chaque fois que le compteur est plus grand qu'un multiple de limite une nouvelle météorite est créée.
Hors ligne
Pages: 1