PDA

Voir la version complète : [PSP][Aide] Image et boucle while :) [résolu]


Solevis
30/05/2007, 21h51
Bonjour a tous,

Bon pour mon deuxième message en quelque jour (vous inquiétez pas ca sera pas toujours comme ca^^)

Bon mon problème vient d'une boucle tout bete, qui affiche des fonctions de gestions des touches et de l'affichage d'images. Et c'est la ou il y a un hic.

Je vous mets un bout de code pour que vous comprenez bien ou je vais en venir :

while (!osl_quit)
{


//Permet de dessiner
oslStartDrawing();

oslCls();
//Lit les touches
oslReadKeys();

oslDrawImage(screen);

//Tant que le joueur n'a pas rempli le plateau
while (!gagne())
{

affichage();
actualisation();

//Gestion du pointeur

if (osl_keys->held.left) x= x -5 ;
if (osl_keys->held.right) x= x + 5;
if (osl_keys->held.up) y= y -5;
if (osl_keys->held.down) y= y + 5;

xb = x;
yb =y;
//dessine le pointeur
oslDrawImageXY(pointeur,x,y);
}

//affiche le tableau de jeu

affichage();

//oslDrawImageXY(pointeur,x,y);


//Fin du dessin
oslEndDrawing();
//Synchronise l'écran
oslSyncFrame();
}

//on quitte l'application
oslEndGfx();
oslQuit();

return 0;
}

La boucle en question est

While(!gagne())

Le problème est que les images censé s'afficher ne s'affiche pas parce que le programme ne voit pas :

//Fin du dessin
oslEndDrawing();
//Synchronise l'écran
oslSyncFrame();

J'ai essayé de les mettre dans la boucle, mais la psp n'a pas aimé une synchro de l'écran a répétition.
Donc je voulais savoir comment remédier a ce problème a ce problème, même si je dois abandonné ma Boucle.

J'espère que vous avez compris mon problème. Si ce n'est pas le cas suffit de me demander

Merci d'avance :)

Yodajr
30/05/2007, 21h54
T'as essayé de mettre le oslStartDrawing aussi dans la boucle ?

themouton
30/05/2007, 22h11
salut

pourquoi tu as besoin de faire 2 boucles ?
tu peux faire :

while(!osl_quit && !gagne) {

}


Un truc important c'est qu'il faut que le osl_quit soit toujours dans les boucles d'affichage, car si le joueur utilise la touche HOME pour quitter ton jeu, le osl_quit devient true. Si tu fais pas ça, la psp va bloquer à attendre la fin de ton programme.

Brunni
30/05/2007, 23h10
+1 themouton
Très important: dans un jeu il ne faut avoir qu'UNE SEULE boucle principale pour éviter de bloquer le jeu. Hé oui si tu penses bouger un ennemi avec une boucle c'est bien, mais il y a peut être un autre ennemi qui devra bouger en même temps, ainsi que ton perso, tout en ayant une update du score à faire, ou de la musique. Bref si tout ton jeu bloque pendant qu'un ennemi bouge, le joueur n'appréciera pas trop :p
Pour ces raisons il faut absolument éviter ta construction et garder une seule boucle dans laquelle tu fais tout ;)
Exemple pour gérer un ennemi qui bouge de gauche à droite:
//Boucle bloquante => Mauvaise idée.
for (x=0;x<100;x++)
dessineEnnemi(x);
Deviendrait plutôt:
int positionX = 0;
while (!osl_quit)
{
//Si c'est le moment d'afficher
if (!osl_skip)
{
oslStartDrawing();
dessineEnnemi(positionX);
oslEndDrawing();
}
//Chaque itération de la boucle on bouge notre perso, jusqu'à 100
if (positionX < 100)
positionX++;

oslEndFrame();
oslSyncFrame();
}

Solevis
31/05/2007, 15h58
Merci pour vos reponses.
C'est vrai que je voyais la boucle principal plus comme une délimitation de main() et moins comme une boucle en elle meme.

Pour mon probleme je me suis tourné vers une condition en if.