Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2012-11-14 22:06:07 Void draw

wkledxg65
nouveau membre
Date d'inscription: 2012-11-14
Messages: 4

Void draw



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

 

#2 2012-11-14 22:37:57 Re : Void draw

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: Void draw



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 :

Code (P5) :

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. tongue

Bon courage. smile

Dernière modification par Olivier (2012-11-15 11:33:52)


L'Amour au Peuple !

Hors ligne

 

#3 2012-11-14 23:30:24 Re : Void draw

wkledxg65
nouveau membre
Date d'inscription: 2012-11-14
Messages: 4

Re: Void draw



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 big_smile

Hors ligne

 

#4 2012-11-15 07:53:30 Re : Void draw

cgiles
membre
Lieu: Est de la France
Date d'inscription: 2005-05-25
Messages: 329

Re: Void draw



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

 

#5 2012-11-15 11:43:13 Re : Void draw

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: Void draw



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... smile

Dernière modification par Olivier (2012-11-15 11:44:15)


L'Amour au Peuple !

Hors ligne

 

#6 2012-11-15 19:08:10 Re : Void draw

wkledxg65
nouveau membre
Date d'inscription: 2012-11-14
Messages: 4

Re: Void draw



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

 

#7 2012-11-15 22:45:47 Re : Void draw

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: Void draw



Mmmm... pas vraiment...

Redraw() : Executes the code within draw() one time.

À moins de mettre un noLoop() quelque part, la fonction draw() tourne en boucle...


L'Amour au Peuple !

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025