CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [C]Faire un système double gravité

DébutPage précedente
123
Page suivanteFin
terminatueur76 terminatueur76
MP
Niveau 10
30 août 2014 à 21:00:00

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.

Pseudo supprimé
Niveau 10
30 août 2014 à 21:09:58

Houla..

while(1

terminatueur76 terminatueur76
MP
Niveau 10
30 août 2014 à 21:12:08

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 :hap:

Pseudo supprimé
Niveau 10
30 août 2014 à 21:15:03

Fail, tout simplement :d) http://pastebin.com/gEUrsV9G

Pseudo supprimé
Niveau 10
30 août 2014 à 21:17:05

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..

Pseudo supprimé
Niveau 10
30 août 2014 à 21:19:12

C'est mieux comme ça : http://pastebin.com/uexVnapX

Et le "while(1)" c'est la base d'un système événementiel hein..

terminatueur76 terminatueur76
MP
Niveau 10
30 août 2014 à 21:44:07

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 :)

terminatueur76 terminatueur76
MP
Niveau 10
30 août 2014 à 22:07:50

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é" :(

terminatueur76 terminatueur76
MP
Niveau 10
30 août 2014 à 22:11:20

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 :(

terminatueur76 terminatueur76
MP
Niveau 10
30 août 2014 à 22:16:57

Désolé quadriple post :fou: 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...

Pseudo supprimé
Niveau 10
30 août 2014 à 22:43:39

Le mieux c'est que tu me donnes ton Skype :)

terminatueur76 terminatueur76
MP
Niveau 10
30 août 2014 à 22:45:51

Je te l'envoie par mp

[-Shana-] [-Shana-]
MP
Niveau 10
31 août 2014 à 03:45:19

Tapaus :d) 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 :hap:

kernel[] kernel[]
MP
Niveau 10
31 août 2014 à 10:11:32

pourquoi tu fais pas simplement un truc genre y = sin(2*pi*fréquence*t) ?

terminatueur76 terminatueur76
MP
Niveau 10
31 août 2014 à 15:22:56

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.....

terminatueur76 terminatueur76
MP
Niveau 10
31 août 2014 à 15:23:33

Désolé double post

pourquoi tu fais pas simplement un truc genre y = sin(2*pi*fréquence*t) ?

J'aime bien ton "simplement" :hap: sinon je voie absolument pas le rapport avec mon truc :doute:

kernel[] kernel[]
MP
Niveau 10
31 août 2014 à 15:25:13

Bah si tu fais ça la balle va avoir le mouvement que tu décris, elle va monter puis descendre, etc.

Pseudo supprimé
Niveau 10
31 août 2014 à 15:29:18

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

terminatueur76 terminatueur76
MP
Niveau 10
31 août 2014 à 15:29:24

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

terminatueur76 terminatueur76
MP
Niveau 10
31 août 2014 à 15:30:52

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

DébutPage précedente
Page suivanteFin
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment