CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • 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 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Cours SDL Collisions simples

Glosoli
Glosoli
Niveau 10
03 août 2011 à 15:34:39

Hello !

Je m'essaie aux sauts avec mon petit bonhomme, mais rien ne se passe. Toute l'équation de la parabole pour équation y = ax² + bx +c est mise. :oui:
http://pastebin.com/UXesgC3d

Il est dans la boucle principale événementielle, là où il y a se déplacer à droite/gauche, fermer la fenêtre etc..

J'ai assigné SDLK à une touche (q, mais c'est a sur clavier AZERTY), rien ne se passe !
Pourtant je lui indique le chemin à prendre, avec un délai pour voir ce qu'il se passe..

tbop2
tbop2
Niveau 10
03 août 2011 à 16:41:42

Ouch 4 lignes dans un switch. Ca existe les fonctions tu sais :ok: ?

C'est quoi la difference entre positionperso et positionpersore dans ton code ?

hyrulink2
hyrulink2
Niveau 7
03 août 2011 à 17:03:22

Tu a regardé avec le débogueur si le code arrive dans ton case?

Sinon ça me semble bien compliqué pour rien ton histoire de parabole.
Je te suggère de donner au sprite une vitesse qui mettra sa position a jour a chaque frame comme ça par exemple:
pos.x += v.x; pos.y += v.y;
Comme ça, si tu veut faire sauter le sprite il suffit de mettre une vitesse vers le haut en y(v.y = -20 par exemple si le repère est inversé). Et pour que le sprite retombe, tu simule la gravité en diminuant la vitesse en y a chaque frames par une constante.

Glosoli
Glosoli
Niveau 10
03 août 2011 à 17:21:04

Hello !
Oui c'pas très propre je sais. :peur:

positionperso c'est la position x y de mon personnage en permanence, positionpersorel c'est la relative qui me permet de faire le saut en parabole. Il doit aller 100 pixels plus loin en faisant donc la forme de la parabole, d'où l'équation mise en place dans le switch !

Glosoli
Glosoli
Niveau 10
03 août 2011 à 17:22:37

hyrulink2 :d) Tu parles de vecteurs ? C'un peu compliqué, j'trouve le principe de la parabole assez simple. :peur:

Glosoli
Glosoli
Niveau 10
03 août 2011 à 17:30:23

Et non y'a rien dans le debugger !

tbop2
tbop2
Niveau 10
03 août 2011 à 17:45:23

Normalement on commence généralement a tripoter des vecteurs comme mentionne hyrulink, son exemple te montre de lui-même comme c'est beaucoup plus simple. Mais ma question maintenant est : es-tu vraiment sûr que le problème vient de ces quatre lignes ?

Glosoli
Glosoli
Niveau 10
03 août 2011 à 17:50:09

D'accord, faut que j'vois ça. :peur:

Ben, j'en sais rien, j'ai tout déclaré en haut, et j'suis sûr de rien ! J'arrive pas à comprendre pourquoi :nno:

hyrulink2
hyrulink2
Niveau 7
03 août 2011 à 19:10:24

Si le debuggeur n'arrive jamais dans le case, c'est probablement qu'il y a un problème au niveau des events. Regarde si ton switch d'events n'a pas de problèmes et essaie de faire en sorte que le debuggeur s’arrête dans ces quatre lignes si tu presse 'q' avec un point d'arrêt, après tu te posera la question de savoir si oui ou non ton calcul marche.

Glosoli
Glosoli
Niveau 10
03 août 2011 à 19:17:51

Je fais des tests je fais des tests.. :peur:

Glosoli
Glosoli
Niveau 10
03 août 2011 à 19:49:37

case SDLK_q:
positionperso.x += v_x;
positionperso.y += v_y;
v_y += v_grav;
break;

Voilà, ben c'est parfait et 25 fois plus simple en fait, merci :rire:

Par contre : j'suis en SDL_KEYUP, mais je dois quand même rester appuyé pour qu'il se déplace entièrement, j'dois faire quoi pour qu'il continue jusqu'à c'qu'il soit arrêté par une collision ?

Glosoli
Glosoli
Niveau 10
03 août 2011 à 19:52:36

Ah, pour l'arrêter c'est si j'suis au dessus de mon sol, j'peux faire mon saut, et donc m'arrêter. Mais y'a toujours le souci de il faut rester appuyé !

Pocolo
Pocolo
Niveau 10
03 août 2011 à 19:54:29

En fait "KEYDOWN" et "KEYUP" ne détectent que le changement d'un état à un autre d'une touche.

Par exemple pour KEYDOWN l'action ne sera exécutée qu'une fois, lorsque la touche passe de non-appuyée à appuyée, c'est pareil pour KEYUP sauf que c'est le contraire.

Glosoli
Glosoli
Niveau 10
03 août 2011 à 20:01:44

Donc il faut faire une boucle ? J'la ferai comment ?

Pocolo
Pocolo
Niveau 10
03 août 2011 à 20:10:12

Déjà je crois que tu utilises "SDL_EnableKeyRepeat", je ne conseil vraiment pas d'utiliser ce truc qui sert justement a contourner le fait que les actions ne sont exécutées qu'une seule fois lorsqu'il y a un changement d’état.

Le mieux c'est tout simplement d'avoir une variable pour le mouvement qui change quand tu appuies sur une certaine touche, et ensuite tu mets l'action a effectuer (en dehors de ton switch event.type) selon la valeur de la variable en question.

Glosoli
Glosoli
Niveau 10
03 août 2011 à 20:19:21

Mhh, j'vois pas trop. :peur:

Le système de boucle ne marcherait pas ? J'ai essayé, j'ai du mal à la mettre en place. :oui:

Et j'du mal à capter ta méthode avec la variable.

hyrulink2
hyrulink2
Niveau 7
03 août 2011 à 20:41:45

En fait ce code :
positionperso.x += v_x;
positionperso.y += v_y;
v_y += v_grav;
n'est pas spécifique au fait de sauter, il n'a donc rien à faire dans le case mais devrai être plutôt dans une fonction qui update un sprite.
Ce que tu doit mettre dans le case, c'est juste v.y = -20(ou une autre valeur en fonction de la gravité).
Ça règle le problème de la touche à laisser enfoncée et ça te permet d'utiliser la vitesse pour autre chose que les sauts.

Dans l'idéal tu devrai même pas toucher aux variables du perso dans la gestion des évents et uniquement appeler des fonction mais bon chaque chose en son temps.

Pocolo
Pocolo
Niveau 10
03 août 2011 à 20:52:11

Ton probleme c'est que tu mets tout dans ton switch d’événements. Il faudrait que tu fasses ce qu'a suggere hyrulink2 " Je te suggère de donner au sprite une vitesse qui mettra sa position a jour a chaque frame ".

Ce que tu as visiblement essayer de faire mais tu t'y es mal pris. Il faudrait un truc comme ça en DEHORS du switch :

Comme cela a chaque frame le personnage se deplacera selon la valeur de vel_x et vel_y que tu augmenteras ou diminueras selon les touches sur lesquelles appuies le joueur.

Par exemple tu peux avoir une variable pour le deplacement horizontale dont la valeur 1 (on peut utiliser des macros ou des enums aussi) correspond au déplacement à droite dans ce cas dans ton switch event.type tu aurais un truc comme ça:

Dans les KEYDOWN:

case SDLK_RIGHT: horizontal = 1; break;

Dans les KEYUP:

case SDLK_RIGHT: horizontal = 0; break;

Puis en dehors de ton switch event.type:

if(horizontal == 1) vel_x += 1;

Bref je t'expliques tout ça vite fait et de façon assez "moche" mais c'est juste pour essayer de te faire comprendre l’idée.

Pocolo
Pocolo
Niveau 10
03 août 2011 à 20:53:22

" Ce que tu as visiblement essayer de faire mais tu t'y es mal pris. Il faudrait un truc comme ça en DEHORS du switch : "

rectangle.x += vel_x;
rectangle.y += vel_y;

J'ai oublié cette partie.

Glosoli
Glosoli
Niveau 10
03 août 2011 à 21:13:03

Je vois. J'vais analyser tout ça un peu mieux et mettre ainsi tout ça en place ! Merci beaucoup !

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment