donc voilà en fait c'est un problème assez général qui m'est posé
Je fais une sorte de mario.
donc mon héros a plusieurs paramètres, les animations, la position sur le terrain et la vitesse de la direction vers laquelle il va en gros.
pour l'instant le terrain est plat, et il y a une sorte de caisse au milieu du chemin.
Quand le héros marche vers la caisse, je veux simplement qu'il s'arrête.
Du coup je met sa vitesse à 0 pour qu'il n'avance plus.
Seulement si je fais ça, il restera bloqué sur la caisse indéfiniment parce qu'il reste toujours en état de collision sur celle-ci, et donc il reste immobile.
Si je met sa vitesse initiale à sa valeur négative, ça marche un peu mieux : il se fait un peu "pousser" de la caisse, du coup après on peut marcher vers l'autre direction, mais si le joueur arrive à s'arrêter pile poile à l'endroit où il y a la caisse et qu'il marche vers la direction opposée, il traversera celle ci.
J'ai tenté de régler ça en mettant la vitesse du héro à 0 mais en le téléportant un peu plus à côté mais ça fait pas réaliste.
Enfin voilà, je voulais savoir comment c'était géré dans les vrais jeux ?
la teleportation c'est ce qui marche le mieux je pense. Mais il faut bien faire attention a ce que le moteur d'affichage ne le voit jamais DANS la caisse.
Tu peut calculer la collision sur sa prochaine position et si elle est valide, tu le met dessus, sinon tu le laisse a sa place (ou tu le recale contre la caisse).
ouais le problème c'est qu'il arrivait dans la caisse quand même un tout petit peu, même en faisant la téléportation ça pouvait toujours arriver
Shakaan pas bête, je vais tenter de faire ça
pour vos réponses
Tu peut tester la collision sur un espace plus grand que la caisse, aussi, et si le perso rentre dedans, tu le positionne le long de cet espace, comme ça il rentrera jamais dans la caisse et tu sera bloqué correctement partout
Bah c'est assez simple à faire, mais il faut y penser:
Au lieu de faire une varible qui teste la collision par exemple, tu en fais 4. Une haut,bas gauche droite... Donc s'il arrive et touche le côté gauche de la caisse, tu mets Déplacement_droit = interdit, ainsi il ne peut plus se déplacer vers la droite, mais dans les autres directions, oui
C'est violent comme technique ça multiplie les variable et les conditions portant sur elles..
C'est pas si mal que ça, je l'ai déjà utiliser et c'est pas si mal...
Je vais essayer faire la technique de Shakaan qui a l'air plus rapide et moins lourde pour le décor
La technique de supersonic c'est mieux pour les ennemis / interrupteurs (genre ceux où on doit se placer au dessus) je pense, mais ça a l'air moins adapté au décors.
Allez je m'y met cette après midi
Oh mon dieu ça marche nickel et en plus en 2 secondes c'était fait
!
Shakaan tu es un génie j'y aurai jamais pensé
Moi il m'avait fallut un moment pour établir ça
putain javais eu exactement mot pour mot le meme probleme dans mon rpg, et javais finis par laisser tomber car javais beau essayer tout ce que ta essayer il y avait tjs un probleme ... comment faire ?
En gros j'ai fait deux méthodes qui renvoient la prochaine position X et la prochaine position Y de mon sprite en passant comme paramètre le temps passé (du coup la méthode pour X par exemple retourne juste x + vx * tempsPasse, où x c'est la position en x du sprite et vx le mouvement (vecteur en gros )
du coup après j'ai eu juste à faire la même méthode pour s'arrêter sauf que j'utilisais ces deux méthodes, et pour la valeure du temps passé en gros j'ai utilisé ça :
long tempsPasse = System.currentTimeMillis() - tempsCumule;
tempsCumule += tempsPasse;
je précise que je fais tout en java donc c'est un peu plus simple qu'en C mais le principe est le même
PrisonerOfFate ca t'interesse pas de t'allier avec moi pour coder un rpg 2d en c++/sfml , je suis deja pas mal avancer mais seul c est pas sim ple ...
Ça aurait été avec plaisir, mais je suis déjà sur mon projet et j'aime pas interrompre ce que je fais, ni faire deux choses à la fois
Salut,
Tu peux aussi télécharger le code source de mon jeu (et l'essayer au passage) : Wiwi's Adventures 2 sur mon site : http://www.rpgamer.fr . Le code des collisions se trouve dans les fichiers .c correspondants : un fichier pour les collisions avec la map (tilemapping), deux pour les collisions joueur-monstre, monstre-décor, épée-monstre, enfin tu verras ;) .
D'ici peu, j'expliquerai tout ça dans un tuto (toujours sur mon site), mais il est encore en cours d'écriture ;) .
En espérant que cela puisse t'aider à avancer sur ton projet,
Jay81
Jay81 ---> ce qui est chiant c'est que tu code en C/sdl et nous on code en c++/sfml ... tu pourrais pas vivre avec ton epoque ??
"Tu pourrais pas vivre avec ton époque ?" -> je ne vois pas le rapport : C++ n'est pas supérieur à C. Qui plus est, ma dernière version utilise un wrapper SDL et fonctionne donc sous OpenGl ;) .
Maintenant, pour ce qui est du code même des collisions, tu peux le repomper en C++ sans presqu'aucune transformation. Maintenant, si cela ne t'intéresse pas, libre à toi de chercher ta propre méthode ;) .
"ce qui est chiant c'est que tu code en C/sdl et nous on code en c++/sfml ... tu pourrais pas vivre avec ton epoque ?? "
pas mal celle la
jay81, ne sais tu pas que si tu ne fais pas du C++ ce n'est pas bien et que a partir du momnet ou tu utilises l'api SDL alors c'est lent ?
Tu ne sais pas que sfml c'est le bien incarne dans une lib de graphismes ? et que tout projet qui ne l'utilise pas est voue a l'echec car il sera punie par le grand mechant dieu "la programmation objet c'est trop bien je l'ai lu sur un forum" ?
</sarcasmes>