Annonce

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


#1 2011-06-02 11:39:46 compte à rebours

zsilu
membre
Date d'inscription: 2010-04-01
Messages: 50

compte à rebours



Salut
Je me mets à processing, donc j'essaie de réaliser un programme à la con. Le principe : on a 10 secondes pour cliquer le plus de fois possibles sur le carré qui se déplace à chaque fois... Passionnant, mmh ?

Mon problème : j'ai fait un compte à rebours, avec millis(). Je veux que le compte à rebours démarre à partir du moment ou l'on clique la première fois sur le carré. Ca marche sauf que comme millis() commence dès le debut de l'applet, mon compte à rebours marche "en arrière plan" dès le début..

C'est pas très clair, je vous mets le patch, vous verrez si vous attendez quelques secondes avant de cliquer sur le carré blanc..

Merci d'avance !

int x_carre, y_carre;
int r, v, b;
int carton;
PFont police;
int temps;
boolean go;

void setup() {
  size(640, 360);
  background(128); 
  noCursor();
  noStroke();
  x_carre = (int)random(width-50);
  y_carre = (int)random(height-50);
  r = (int)random(245)+5;
  v = (int)random(245)+5;
  b = (int)random(245)+5;
  carton =0;
  police = loadFont("font.vlw");
  temps = 10;
  frameRate(60);
}

void draw() {
  background(r, b, v);
  noStroke();
  rect(x_carre, y_carre, 50, 50);
  viseur();
  c_a_r();
  textFont(police, 48);
  text(carton, 10, 40); 
  textFont(police, 24);
  text("compte a rebours :", 10, height-50);
  textFont(police, 48);
  text(temps, 10, height - 20);
}

void mouseReleased() {
  
  if (mouse_in_square()==true && temps >0) {
    x_carre = (int)random(width-50);
    y_carre = (int)random(height-50);
    r = (int)random(245)+5;
    v = (int)random(245)+5;
    b = (int)random(245)+5;
    carton ++;
    go = true;
  }
}

boolean mouse_in_square () {
  if (mouseX-x_carre>=0 && mouseX-x_carre<51 && mouseY-y_carre >=0 && mouseY-y_carre<51) {
    return true;
  }
  else {
    return false;
  }
}

void viseur() {
  stroke(0);
  strokeWeight(2);
  strokeCap(SQUARE);
  line(mouseX, mouseY+10, mouseX, mouseY-10);
  line(mouseX-10, mouseY, mouseX+10, mouseY);
}


void c_a_r() {
  if (go ==true) {
    if (temps == 0 ) {
      temps = 0;
    }
    else {
      temps = 10 - millis()/1000;
    }
  }
}

PS : étant débutant, et pas du tout habitué au code en ligne comme ça, est-ce un code "propre" ou il y a moyen de faire beaucoup plus court pour le même résultat ..?

Hors ligne

 

#2 2011-06-02 12:18:42 Re : compte à rebours

22_
membre
Lieu: paris
Date d'inscription: 2010-04-08
Messages: 189

Re: compte à rebours



Salut,

Il faut que tu utilises un event mouseClicked pour déclencher ton countdown et stocker à ce moment la valeur de millis()
Tu stockes alors dans une var la valeur de millis() au moment où le countdown s'est déclenché. Ensuite, dans ta boucle draw(), tu ré-utilises la fonction millis() afin de savoir combien de temps se sont écoulés depuis.

Dernière modification par 22_ (2011-06-02 12:21:06)

Hors ligne

 

#3 2011-06-02 17:46:58 Re : compte à rebours

zsilu
membre
Date d'inscription: 2010-04-01
Messages: 50

Re: compte à rebours



En effet, il suffisait d'ajouter au timer le temps entre l'ouverture du sketch et le moment ou l'on clique. C'était tout bête smile .

Merci 22_, j'ai pas tout lu ton code, mais j'ai saisi le concept !

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024