Bonsoir, j'ai pu constaté qu'on ne pouvait pas mettre deux void draw() dans un code.
Y a t'il donc un moyen d'avoir une fonction avec les mêmes caracteristiques que la fonction draw().
Voici mon code pour plus de comprehension:
NB: Dans le code il y a une fonction mouseReleased qui n'a pas l'utilité voulut mais cela ne joue pas sur le jeu.
Dans ce code il est censé y avoir en première parti un menu permettant un mode 1 joueur ou 2 joueurs lancé ainsi une partie de pong.
Actuellement seul le mode un joueur est codé.
float deplacementX, deplacementY;
//deplacement de la balle
float deplacementZ;
//deplacement de la raquette
float x, y;
//coordonées de la balle
float w, z;
//coordonées de la raquette
void setup() {
size(1000, 800);
background (0);
textSize(50);
text ("1 joueur", 200, 300, 350, 400);
text ("2 joueurs", 200, 400, 550, 400);
}
void draw() { // le premier draw permettant à la fonction mouseReleased de fonctionner
mouseReleased();
}
void mouseReleased() {
if (mouseX < 400 && mouseX > 200 && mouseY <350 && mouseY >300) {
draw();
}
}
void draw() { // le second pour lancer une sorte de second sketch
apparence();
effacer();
dessiner();
deplacementBalle();
keyPressed();
rebond();
defaite();
}
void apparence() {
size(1000, 800);
background(255);
x=500;
y=400; //la balle est au milieu
deplacementX= 5;
deplacementY= 5;
w=15;
z=60;
deplacementZ=5;
}
void effacer() {
background (255);
}
void dessiner() {
fill(0);
rect (w, z, 25, 85);
ellipse(x, y, 30, 30);
stroke(0);
strokeWeight(5);
line(500, 0, 500, 800);
noFill();
rect(0, 0, 1000, 800);
}
void deplacementBalle() {
x=x+deplacementX;
y=y+deplacementY;
}
void keyPressed () { //deplacement raquette
if (key == 'z') {
z=z-deplacementZ;
}
if (key == 's') {
z=z+deplacementZ;
}
}
void rebond() {
if (x > 985 && deplacementX > 0) {
deplacementX = -deplacementX;
}
if (y> 785 && deplacementY > 0) {
deplacementY = -deplacementY;
}
if (y < 15 && deplacementY < 0) {
deplacementY = abs(deplacementY); //valeur absolue rendant la variable positive
}
if (x<w+35 && y>z && y<z+85) {
deplacementX = -deplacementX;
}
}
void defaite() {
if (x<-30 && deplacementX <0) {
noLoop();
background (0);
textSize(100);
fill(255);
text("Game over", 100, 350, 900, 700);
}
}
En espèrant avoir été suffisamment clair je ne suis pas très bon pour les explications.
Merci d'avance.
Hors ligne
Je ne suis pas un expert, mais la fonction void mouseReleased() n'a pas besoin d'être appelée pour être active.
Idem pour keyPressed ()
Pour ton mode 1 ou 2 joueur, tu peux imaginer un truc du genre :
void draw () { if (choixMode == 2) { jeu2 (); } else { jeu1(); } } void jeu1 () { } void jeu2 () { }
Avec un choixMode qui serait déterminé au démarrage.
... mais bon, comme je te l'ai dit, je ne suis pas un expert.
Bon courage.
Dernière modification par Olivier (2012-11-15 11:33:52)
Hors ligne
A vrai dire pour le void mouseReleased je me suis pas vraiment concentré dessus j'essais de d'abord finir le menu.
Ici, le code fait que si je passe la souris sur sur 1 joueur la partie se lance ... plus ou moins puisque la balle et la raquette ne bouge pas, se qui me fait penser que la fonction draw est nécessaire pour que le sketch se remette à jour a chaque (du moins il me semble).
En tout cas merci de ta réponse, si tu as une autre idée je suis tout ouïe,de mon coté je vais essayer de trouver d'autres solutions
Hors ligne
Quand j'avais codé un pong dans openFrameworks j'avais utilisé la méthode d'olivier :
des fonctions menu ,unJoueur ,deuxJoueur, et je les appelais quand j'en avais besoin, c'est plus simple, et plus clair
Et oui le draw est nécessaire pour rafraichir l'affichage.
Pour mieux comprendre comment processing marche je te recommande les tutos du site : http://processing.org/learning/
Hors ligne
citation :
la fonction draw est nécessaire pour que le sketch se remette à jour
Oui, oui, la fonction draw () est indispensable, mais elle aussi, tu n'as pas besoin de l'appeler pour qu'elle tourne en boucle.
S'il y a une fonction draw () dans ton sketch, par défaut, elle va s'exécuter toute seule comme une grande.
Pas besoin d'appliquer une condition pour cela.
Par contre, ce que la fonction draw () va exécuter peut être soumis à condition.
D'où mes jeu1() et jeu2().
Pour info, dans le cas où tu as besoin, à un moment particulier de ton sketch, de réactualiser l'affichage, il y a la fonction redraw () (que tu dois explicitement appeler, du coup).
Bon courage...
Dernière modification par Olivier (2012-11-15 11:44:15)
Hors ligne
Une fois que la fonction redraw () a été exécuté une première fois, la fonction draw devient obsolète et redraw() a les mêmes caractéristiques qu'une fonction draw () toute simple.
C'est bien ça ?
Hors ligne
Mmmm... pas vraiment...
Redraw() : Executes the code within draw() one time.
À moins de mettre un noLoop() quelque part, la fonction draw() tourne en boucle...
Hors ligne