Processing: Mes images n'apparaissent pas

Fermé
R2-D2 - Modifié par KX le 25/05/2015 à 12:41
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 25 mai 2015 à 13:13
bonjour a tous,
je voudrais créer un mini jeu, je dois donc mettre en place une animation pour que le personnage marche, en fait, une succession d'images mais mon programme ne marche pas et une seul image apparaît a la fin ! ...
comment puis je faire ?



void setup () 
{
  background(#AAAAAA);
  size(800,600);
}

PImage marche1;
PImage marche2;
PImage stop ;
int x=0;

void marche() 
{

    println("debut"); //juste une information pour voir si les temps son respecter
    background(#AAAAAA);
    image(marche1,50,135);
    delay(1000);
    println("milieu"); 
    background(#AAAAAA);
    image(marche2,50,135);
    delay(1000);
    println("fin"); 
  
  
}


void draw () 
{
  frameRate (200);
  marche1 = loadImage("marche1.png");
  marche2 = loadImage("marche2.png");
  stop = loadImage("stop.png");
 
      if (keyPressed && key=='q')
       {
       marche();
       }
       
  
}

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 25/05/2015 à 13:24
Bonjour,

Déjà mauvaise idée de mettre le chargement des images dans la méthode draw(), car celle-ci est appelée en continue pour l'affichage de l'interface graphique (200 fois par secondes vu le paramétrage de frameRate).
Tes images seront donc chargées des centaines de fois, alors qu'évidement une fois suffit. La méthode setup() est faite pour ça.

Un point important à savoir, c'est qu'aucun affichage ne peut se faire tant que la méthode draw() n'est pas terminée. C'est pour ça que tout apparaît à la fin (de la méthode draw). Or comme tu redéfinis le background entre chaque image, cela efface tout, donc quand la méthode draw() se termine - et que l'affichage a lieu - seule la dernière image est à afficher.

Si tu veux faire une "gestion du temps", il faudrait que tu comptes le nombre de fois que la méthode draw() est appelée, sachant que si tu as un frameRate à 200, tu auras 200 appels de draw() dans une seconde.

Exemple :

PImage marche1;
PImage marche2;

void setup() 
{
    background(#AAAAAA);
    size(800,600);
    frameRate(200);
    marche1 = loadImage("marche1.png");
    marche2 = loadImage("marche2.png");
}

int frame = 0;

void draw() 
{
    switch(frame) 
    {
    case 0:
        if (keyPressed && key=='q')
        {
            background(#AAAAAA);
            image(marche1,50,135);
            frame=1;
        }
        break;
    case 200:
        image(marche2,50,135);
        frame=0;
        break;
    default:
        frame++;
    }
}
La confiance n'exclut pas le contrôle
0