Volià ça fait maintenant un mois que je travaille sur un saut en SDL, et malgré de nombreuses visites sur les sites comme celui de Fvirtman (que je remercie par ailleurs pour ses super tutos), les forums voisins ainsi que celui-ci, je n'ai rien trouvé que je puisse comprendre.
Beaucoup de formule mathématiques et physique, parabole, position absolue et relative, vitesse x et y et enfin tout un tas de constantes comme la constante gravitationnelle.
De plus, j'ai beau essayé tout un tas de manip, rien n'y fait. T-T
J'ai essayé de modifié des coordonnées SDL_Rect ("y" en particulier) et de faire des SDL_Delay mais ça ne fonctionne pas.
Donc je viens sur le forum à la recherche du Saint Graal en espérant que l'on puisse m'aider malgré mon niveau pourri en maths et en physique.
J'aimerais faire un saut un peu comme sur Mario Bros de la NES (réaliste mais pas trop quoi !) et que vous m'expliquiez pour que je comprenne seul.
Je vous remercie par avance.
La persévérance paye toujours malgré les obstacles.
Je ne vois pas ce que tu ne comprends pas sur ce tutoriel ? Si tu me donnais plus d'indications sur les points précis que tu ne comprends las je pourrai mieux t'aider !
Ok alors je t'explique une façon vraiment simple de faire :
1- Il te faut un personnage (que l'on va représenter ici par un carré). On lui attribue des coordonnées initiales : Ix=0, Iy=400, et des coordonnées qui bougeront en même temps que le perso (P pour position) : Px=0, Py=400
2- Tu initialises les constantes de gravitation (c'est l'accélération) : par exemple Ax=0 et Ay=9 (et non -9 car l'axe des y est tourné vers le bas !)
3- Tu initialises la vitesse initiale : par exemple Vx=10, Vy=-50
Bonjour, et excusez-moi pour ce long retard de 2 semaines.
Donc tout d'abord Codz_01, merci de ta réponse, j'ai suivi un peux ce que tu m'as donné comme solution et cela me rappelle un code vu sur un site que j'ai visiter.
En ce qui concerne le code il faudrait que je le refasse étant donné que je n'avais pas compris, je m'étais dis que ce n'étais pas du tout à ma portée.
Je suis alors retourné sur le site de Fvirtman et j'ai relu plusieurs fois le dit programme, étant donné que c'est le saut de plateforme qui se rapproche le plus de mes attentes, et il me semble que je commence à comprendre. Mais une fois que j'ai compris à peu près le fonctionnement, viens le problème de l'animation et des mouvements.
Je m'explique, je veux bouger avec mon personnage mais mon animation est en cours. Donc en faisant le mouvement du personnage je me retrouve face à un clignotement très désagréable lorsque je clique sur la flèche de mouvement. Et comme ce problème si est encore en cours, je ne me suis pas résolu à essayer de rajouter le saut au jeu.
SDL_PollEvent est mal utilisée ici. Elle s'utilise dans une boucle.
bg1, bg2, ..., bg11, utilises un tableau.
Tu te rends compte qu'il n'y a qu'une seule instruction qui diffère dans tous tes blocs if avec le SDL_MapRGB, le SDL_BlitSurface et le SDL_FLip ? Note que si tu utilises un tableau, tu n'auras même pas besoin de if, il te suffira de blit la surface bg[bg_tick / 1000].
Il se passe quoi quand bg_tick est supérieur à 11000.
Et tu devrais rendre certaines égalités larges et non strictes, là tu ne fais rien par exemple si bg_tick est exactement égal à 1000. En fait, le mieux ce serait que tu utilises des else if. Comme ça tu pourras avoir if(bg_tick < 1000), else if(bg_tick < 2000), etc. Mais comme dit plus haut, avoir un tableau règle tous ces soucis.
Bonjour et merci de votre réponse ! Je suis toujours en retard je m'en excuse.
Pour répondre à tout ce que vous m'avez dis :
1 - Je suis nouveau, les notions peuvent parfois me paraître compliquées, mais je ne me suis jamais bien servis de SDL_Flip, je ne sais pas faire. J'en ai mis plusieurs car lorsque je ne les mettais pas, les sprites du jeu laisser des trainées derrières eux. Pourriez-vous m'expliquer pourquoi, s'il vous plait ?
2 - On m'a souvent dis de mettre SDL_PollEvent lorsque la boucle en question était un while. Du coup je fais comme ça. Comment l'utiliser ?
3 - Un tableau ?
4 - C'est à dire "une seule instruction qui diffère" ? Je ne savais pas que c'était possible avec des tableaux. Je vous remercie et je vais essayer dès que possible.
5 - Normalement il était sensé y avoir 15 conditions qui sont responsables de l'animation du background seulement je n'ai pas fini les différentes surfaces de l'animation mais lorsque bg_tick est supérieur à 15000 alors le compteur est remis à zéro et l'animation repart elle aussi de zéro. Seulement je trouve que c'est long. Y'aurait-il une technique plus courte ?
6 - "Larges et non strictes" ? Qu'est-ce que ça veut dire ? Malgré l'edit je ne comprend pas l'usage précis de < ? A quoi sert-il ? Je vais me renseigner sur l'usage des tableaux en SDL, je vous remercie.
7 - "Le retour des fonction à risques" ? Les destructeurs ?
8 - La forme vous voulez dire ? Je ferais en sorte. Merci.
Je sais que je pose un grand nombre de questions mais ma logique me bloque. Il me faut réfléchir trop longtemps pour comprendre. Merci de votre aide !
La persévérance paye toujours malgré les obstacles.
Je pense que tu n'effaçais pas bien ton écran. La méthode c'est au début de la boucle j'efface l'écran, puis je fais tout ce que j'ai à faire et à la fin je mets à jour l'écran (une seule fois).
Tu peux regarder le tutoriel de Fvirtman où il explique ça (et donne en plus une méthode pour gérer les évènements que tu peux utiliser pour te simplifier la vie).
Oui, un tableau de SDL_Surface *. Tu aurais alors bg[0],bg[1], ... et bg[10].
En effet, si bg_tick est plus petit que 1000, bg_tick/1000 vaut 0, si 1000 <= bg_tick < 2000, bg_tick/1000 vaut 1, etc.
Ben le point 4 y répond un peu, plus de condition avec le tableau.
Ce que je veux dire c'est que si bg_tick < 1000, tu fais quelque chose, si bg_tick > 1000, tu fais quelque chose, mais pas si bg_tick est égal à 1000 (pareil pour 2000, 3000, etc.). Tu n'as que des inégalités strictes (que des > et des < et aucune large (pas de >= ou de <=). Les < sont des bugs d'OC, en fait ce sont des <. Mais là encore, avec le tableau ce problème disparaît.
Si le chargement de la SDL échoue, ou si on ne réussit pas à ouvrir de fenêtres ou encore si le chargement d'une image échoue, il se passe quoi ?
Oui c'est ça.
Pas de problème, c'est mieux de prendre son temps pour bien comprendre.
yo@n97one, je vous remercie du temps que vous prenais pour m'aider pour commencer.
Ensuite, en ce qui concerne la ligne de code pour le tableau, concrètement et littéralement ça veut dire quoi ?
Pour la suite, vous voulez dire que le tableau va initialiser les surfaces dans plusieurs adresse mémoire en une seule ligne de code (où je me fais des rêves ?).
En ce qui concerne l'effacement de l'écran, j'ai compris, merci !
Pour la 5ème réponse, je n'ai pas vraiment compris l'explication, pourriez-vous développer ?
Encore désolé pour les nombreuses questions.
La persévérance paye toujours malgré les obstacles.
Je n'arrive pas à faire de saut en SDL langage C.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
La persévérance paye toujours malgré les obstacles.
La persévérance paye toujours malgré les obstacles.
La persévérance paye toujours malgré les obstacles.
La persévérance paye toujours malgré les obstacles.
La persévérance paye toujours malgré les obstacles.
La persévérance paye toujours malgré les obstacles.
La persévérance paye toujours malgré les obstacles.
La persévérance paye toujours malgré les obstacles.