Processing: Mes images n'apparaissent pas
R2-D2
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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 ?
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(); } }
A voir également:
- Processing: Mes images n'apparaissent pas
- Processing download - Télécharger - Langages
- Exception processing message 0x00013 unexpected parameters ✓ - Forum Windows
- Pas de disque / exception processing message - Forum Windows
- Exception processing message 0x0000013 ✓ - Forum Windows
- Processing delta log record - Forum Windows 8 / 8.1
1 réponse
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 :
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