Le joueur qui monte, saute-t-il ou grimpe-t-il?

11

Dans un jeu de plateforme basé sur la physique 2D qui contient des échelles, comment déterminez-vous si le joueur qui monte est provoqué par un saut ou s'il monte une échelle, de sorte que vous sachiez quelle animation jouer?

Et en général, évidemment, le vecteur de direction n'est pas suffisant pour déterminer l'animation à jouer: comment déterminez-vous également la cause du mouvement (afin que vous connaissiez le sprite correct à utiliser)?

Paul Manta
la source
1
Si un joueur est sur une échelle, est-il vraiment dans les airs?
Derek

Réponses:

15

J'ai régulièrement un problème de logique personnelle que vous semblez exprimer ici. C'est que parfois vous regardez la logique et la programmation dans la mauvaise direction. Dans ce cas, vous semblez ne pas réaliser que depuis le début vous savez ce qui se passe, à cause du code logique. Vous devriez déjà savoir, par programme, s'il est sur l'échelle ou non.

Pensez-y (comme je l'ai dit, j'ai souvent ce problème). La logique des jeux devrait savoir que vous êtes sur l'échelle, en supposant que vous soyez un programmeur intelligent. Pour une meilleure explication, j'ai un type d'archive de fichier, et j'ai perdu environ une heure par jour à essayer de comprendre comment obtenir la taille des données et je ne me suis jamais arrêté de penser que, lorsque je charge le fichier, je connaître sa taille: P.

La raison pour laquelle cela concerne si exclusivement, c'est que vous le regardez comme "Maintenant que je suis dans les airs, comment puis-je savoir si je suis sur une échelle ou si je saute?" ... Quand vous devriez vraiment pense "Je suis sur le point de prendre l'air, mais par quelle méthode en PREMIER, afin de pouvoir l'utiliser pour les animations."

Joshua Hedges
la source
Simple, par exemple: OnJump()changez votre jumpingbooléen en vrai, puis si vous êtes dans les airs et que jumpingc'est faux, alors vous tombez ou sur une échelle, etc.
Joshua Hedges
6

Le système physique ne sait ni ne se soucie pourquoi le joueur se déplace dans une direction particulière. C'est votre jeu qui a poussé le système physique à déplacer le joueur de cette façon, et il est donc de votre responsabilité de garder une trace de cela. L'entité du joueur devrait avoir un état qui lui dira si elle saute, grimpe, court, etc. Vous ne devriez pas essayer de comprendre cela en fonction de ce qui s'est passé avec le système physique.

Nicol Bolas
la source
2

Il semble que tout événement déclenché lors de la collision qui définit la vitesse verticale du joueur puisse également être utilisé pour définir un indicateur spécifiant quelle animation utiliser.

Si vous utilisez une bibliothèque tierce trop restrictive avec les informations qu'elle vous donne, il serait possible d'entourer l'échelle d'un rectangle et si le joueur se déplaçant vers le haut et contenu dans ce rectangle, alors faites l'animation d'escalade.

ClassicThunder
la source
Cela soulève en fait un bon point que j'allais aborder plus tard dans mon propre développement de jeux, et c'est comment changer la vitesse d'une animation basée sur la physique. J'ai des personnages que je veux agiter leurs bras de manière procédurale, plus rapidement en fonction de la vitesse à laquelle ils tombent. Et je n'avais jamais pensé à un bon moyen de le faire en profondeur (je réfléchissais avec le temps), mais votre idée de vitesse est bien meilleure. +1 pour une réponse générale utilisable, et n'étant pas spécifique à son cas uniquement.
Joshua Hedges
1

Lors du réglage de la vitesse de saut, définissez également l'état des caractères sur STATE_JUMPING. En faisant cela, vous savez toujours dans quel état se trouve le joueur et pouvez agir en conséquence en vérifiant l'état du joueur.

crisi
la source