Deux conditions "if" : l'une n'annule pas l'autre.
Bonjour,
J'ai un petit problème a priori simple mais qui m’embête un peu.
Voici le bout de code tout d'abord :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Enemy[id].X += Enemy[id].SpeedX; // mouvement axe X ennemi.
if( Enemy[id].X == SCREEN_WIDTH /2 )
// Si axe ennemi X = moitie largeur fenetre
{
Enemy[id].SpeedX =0;
Enemy[id].Y -= 1.0; // Ennemi remonte sur son axe Y donc
}
if(Enemy[id].Y < 0) // Si axe Y = 0, ennemi doit redescendre
{
Enemy[id].Y += 10.0;
} |
Je ne sais pas si mes commentaires sont assez explicites. En gros j'ai un ennemi qui arrive sur le coté, et qui arrivé a la moitié de la largeur de l’écran doit remonter puis brusquement redescendre. Sauf que comme vous avez pu le remarquer, les deux conditions "if" sont valables donc l'axe Y de l'ennemi "sautille", il ne sait plus s'il doit redescendre ou remonter.:aie:
J'ai bien essayé de bricoler un truc pour que la première condition ne soit plus valable mais je bloque un peu. D'autant que je suis censé rendre un truc plus ou moins "propre" :oops:.
C'est du développement de jeu-vidéo mais j'ai jugé que c’était mieux de poster dans la partie C++. Désolé si ça ne convient pas.
Merci !
Ajout des balises [CODE] (bouton #). merci d'y penser.
Citation:
Envoyé par
kEep OnE
Bonjour,
J'ai un petit problème a priori simple mais qui m’embête un peu.
Voici le bout de code tout d'abord :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Enemy[id].X += Enemy[id].SpeedX; // mouvement axe X ennemi.
if( Enemy[id].X == SCREEN_WIDTH /2 )
// Si axe ennemi X = moitie largeur fenetre
{
Enemy[id].SpeedX =0;
Enemy[id].Y -= 1.0; // Ennemi remonte sur son axe Y donc
}
if(Enemy[id].Y < 0) // Si axe Y = 0, ennemi doit redescendre
{
Enemy[id].Y += 10.0;
} |
Je ne sais pas si mes commentaires sont assez explicites. En gros j'ai un ennemi qui arrive sur le coté, et qui arrivé a la moitié de la largeur de l’écran doit remonter puis brusquement redescendre. Sauf que comme vous avez pu le remarquer, les deux conditions "if" sont valables donc l'axe Y de l'ennemi "sautille", il ne sait plus s'il doit redescendre ou remonter.:aie:
J'ai bien essayé de bricoler un truc pour que la première condition ne soit plus valable mais je bloque un peu. D'autant que je suis censé rendre un truc plus ou moins "propre" :oops:.
C'est du développement de jeu-vidéo mais j'ai jugé que c’était mieux de poster dans la partie C++. Désolé si ça ne convient pas.
Merci !
Salut Keep One,
Code:
1 2 3 4 5 6 7 8 9 10
| if( Enemy[id].X == SCREEN_WIDTH /2 )
{
Enemy[id].SpeedX =0;
Enemy[id].Y -= 1.0; // Ennemi remonte sur son axe Y donc
}
if(Enemy[id].Y < 0) // Si axe Y = 0, ennemi doit redescendre
{
Enemy[id].Y += 10.0;
} |
=> J'ai du mal à croire que l'ennemi ne fasse que sautiller, il sautille tout en grimpant ou tout en descendant ?
cela m'étonnerait également que ton Ennemy[id] < 0 fonctionne.... j'imagine que ton personnage n'es pas coller en bas de la fenetre, et en plus même s'il l'était, je vois mal comment il pourrait atteindre une hauteur négative pour ensuite redescendre : es-tu sûr d'où se situe ton axe Y à zéro ?
Enfin, si le mouvement semble exactement faire ce que tu souhaites, mais qu'il répète le geste sans vouloir s'arrêter, c'est le même problème et la même solution que pour ton décalage de map l'autre fois... il te faut créer un flag (un booléen) permettant de savoir si le mouvement a été effectué.
++ ^^