Bonjour à tous, pour mon prototype de jeu j'aurais besoin de faire un système double gravité: une balle commence tout en bas de la fenêtre remonte tout en haut et quand elle atteint le haut elle redescend etc.... comme une boucle.
J'ai réussi à faire en sorte qu'elle monte d'une certaine vitesse compensé par la gravité mais le problème c'est que quand elle atteint le haut de la fenêtre, ben elle s'arrête,voila la partie du code qui est concerné:
double v_grav = 0.08;
double v_saut = -4;
double v_y = v_saut;
int testcolli,flag=0;
testcolli=1; //la balle doit être en train de monter
if((testcolli==1)&&(flag==0))
{
if (positionballe.y >=0)
{
// Evolution des positions : vive la rigueur !
positionballe.y += v_y;
// evolution de la vitesse verticale
v_y += v_grav;
}
if(positionballe.y==50)
testcolli=2;
flag=1;
}
if((testcolli==2)&&(flag==1))
{
if (positionballe.y <=50)
{
// Evolution des positions : vive la rigueur !
positionballe.y -= v_y;
// evolution de la vitesse verticale
v_y += v_grav;
}
if(positionballe.y==650)
testcolli=1;
flag=0;
}
Les variables testcolli et flag sont des flags qui change d'état si la balle atteint le haut ou le bas de la fenêtre, et aussi pour l'instant je m'occupe pas de la position x de l'image pour simplifier.
Donc si vous pouviez m'aider, ça m'arrangerais car j'ai testé pas mal de truc mais je voie pas trop ou est le problème.
Houla..
while(1
Heu non pas while(1) parce que c'est le gros bordel avec ça en sachant que pour l'instant je gère que la position y mais qu'ensuite je gérerais la position x et mon jeu ne fera pas que ça
Fail, tout simplement http://pastebin.com/gEUrsV9G
Heu je me suis trompé désolé, inverse tout simplement la valeur de ma variable "bas" avec "bas = !bas" au lieu de remettre la balle en haut ou en bas si elle a etteint une limite..
C'est mieux comme ça : http://pastebin.com/uexVnapX
Et le "while(1)" c'est la base d'un système événementiel hein..
Merci,de toute façon j'ai un while(1) vu que j'ai une fonction d'event avec détection de touches et ça quitte pas cette fonction tant que j'appuie pas sur une certaine touche ou sur la croix rouge
J'ai regardé ton truc mais ça correspond pas vu que je gère la vitesse: variable v_y , la gravité: v_grav et au final la position, donc c'est pas juste un if machin =1 else machin = 0 ,en plus je bloque pour la partie "inversion de gravité"
J'ai aussi le problème avec le flag ou il faudrait que je l'initialise au début de la fonction mais qu'après le programme ne passe plus par cette ligne et je peux pas mettre un while(1) vu que j'ai déja un while"infini" autre part
Désolé quadriple post j'ai essayé avec une etiquette mais ça fait planter mon programme et c'est très déconseillé d'en utiliser en c alors...
Le mieux c'est que tu me donnes ton Skype
Je te l'envoie par mp
Tapaus Ta solution est ultra moche et a chier j'ai envie de dire.
Je passerai cette aprem (3h de l'aprem) voir si c'est resolu. Le cas negatif, je te filerai un petit truc.
Flemme de reallumer mon ordi, et je hais taper sur mon portable
pourquoi tu fais pas simplement un truc genre y = sin(2*pi*fréquence*t) ?
Non ça a pas été résolu, disons que certains trucs ont été améliorés mais c'est pas résolu.
Pour l'instant je suis bloqué car en fait j'ai 1 flag et le problème c'est qu'a chaque fois que j'appel la fonction le flag est réinitialisé.....et c'est la ou ça coince, j'ai essayé de déclaré le flag dans le main et de la passer en argument à la fonction ça change rien.
J'ai essayé de créer un pointeur qui "pointe" sur ce flag ça change rien.....
Désolé double post
pourquoi tu fais pas simplement un truc genre y = sin(2*pi*fréquence*t) ?
J'aime bien ton "simplement" sinon je voie absolument pas le rapport avec mon truc
Bah si tu fais ça la balle va avoir le mouvement que tu décris, elle va monter puis descendre, etc.
Comment je ferais :
- En tombant, la balle accumule de l'énergie
- Lorsqu'elle touche quelque chose, elle lui transfère toute ou partie de son énergie
- S'il reste de l'énergie, une action contraire est appliquée à son vecteur vitesse
TL;DR raisonne en terme d'énergie
Pour l'instant le gros problème c'est pas ça, en gros dans ma fonction de gestion de gravité j'ai 2 if que chacun s’enclenche en fonction de la valeur du flag ( donc les 2 s'enclenche pas en même temps) le problème c'est qu'il fait le 1er if qui lui change la valeur du flag ,ensuite il fait une partie du 2 ème if(vu que le flag à changé de valeur) mais la partie du 2 ème if qui sert à remettre la valeur du flag par défaut il la fait pas donc en principe il doit pas revenir au 1er if, mais il le fait quand même......
Donc pour moi ça vient du fait que la valeur par défaut du flag est donné à chaque fois que j'appelle cette fonction et je vois pas comment régler ça
La balle je l'a fait apparaitre tout en bas de la fenêtre et elle remonte tout en haut de la fenêtre exactement comme je veux mais elle redescend pas et je suis quasi sûr que ça vient du problème de flag que j'ai expliqué le post d'avant