Comment déterminer si le personnage est tombé dans l'espace dans un coureur / cavalier infini?

12

Je construis un coureur infini 2D. Dans le jeu, les personnages sautent de pilier en pilier et les piliers sont générés aléatoirement. J'ai ce travail. Mais comment déterminer si le personnage n'a pas sauté sur un pilier et est tombé dans l'écart entre les piliers? Un pilier est de forme rectangulaire ordinaire.

SanSolo
la source
OT: Je pensais que cette question avait été publiée sur rpg.SE et je me suis dit "Quel genre d'exploit de règle a été trouvé maintenant?
o0 '.

Réponses:

20

Ajoutez une région rectangulaire au bas du niveau, inférieure à la hauteur minimale autorisée d'une plate-forme. Si le joueur a traversé cette région, il est tombé d'une plate-forme.

mklingen
la source
1
Et faire de ce rectangle un enfant de la caméra pour qu'il bouge avec la caméra et soit toujours présent? C'est tellement simple. Merci.
SanSolo
Même si le joueur ne devrait pas pouvoir passer à travers le niveau, je pense que c'est une bonne sauvegarde à avoir s'il réussit à le faire.
mucaho
5
Si vous vérifiez littéralement l'intersection, assurez-vous que votre personnage ne peut pas tomber si vite qu'il passe à travers la surface (c.-à-d., Une de celle du personnage entièrement au-dessus et la prochaine image entièrement en dessous).
wchargin
2
Oui, le rect doit s'étendre aussi bas que nécessaire pour éviter cela. La vérification de la hauteur fonctionnera également, mais cela vous donne la possibilité de redimensionner la "zone de destruction" en fonction du niveau.
mklingen
6
Pour éviter le "clipping" à travers le rectangle, pourquoi pas un simple if (playerPos.x < minHeight)?
Cole Johnson
24

Si votre jeu ne défile que horizontalement, vous pouvez vérifier si la position verticale du personnage est en dessous du bord inférieur de la scène.

Si votre jeu défile également verticalement (probablement vers le haut), vous pouvez vérifier si le joueur est tombé sous le bord inférieur de la vue (c'est-à-dire la zone de la scène qui est à l'écran ou au centre de la caméra).

En général, la condition de mort est si le personnage ne reste pas "à huis clos". En contrôlant le mouvement de votre caméra, vous pourrez régler votre gameplay. Par exemple, si dans une étape de défilement vertical, vous ne permettez à votre appareil photo que de se «tasser» un peu vers le bas, tout en autorisant un mouvement complet vers le haut, vous pénaliserez les chutes profondes hors écran.

Jelle van Campen
la source
Oui, c'est aussi un moyen facile. J'aurais juste besoin de trouver la position la plus basse.y que le personnage peut être.
SanSolo
1
Correct! en cas de défilement horizontal, vous pouvez simplement vérifier la taille verticale de la scène dans votre éditeur de carte. En cas de défilement vertical, vous pouvez vous assurer que la caméra ne se déplace que vers le haut. De cette façon, si le personnage tombe, il se retrouvera sous la vue de la caméra. Vous pouvez ensuite simplement vérifier si la position verticale du personnage tombe en dessous de la limite inférieure de la vue.
Jelle van Campen
@JellevanCampen: Vous n'êtes pas obligé de limiter nécessairement la caméra aux mouvements ascendants. Vous pouvez tuer des personnages qui ne parviennent pas à rester "à huis clos", ou demander à la caméra de les suivre.
Mooing Duck
Je n'aime pas autant cette réponse car elle relie directement la caméra aux limites de niveau. La réponse de mklingen fonctionne même si les limites du niveau ont plus d'une taille d'écran. La caméra peut se déplacer vers le haut et vers le bas pour se concentrer sur le personnage, mais il n'y a aucun risque que le personnage tombe plus vite que la caméra, reste dans le niveau, mais heurte toujours le cadre de délimitation attaché directement à la caméra.
Kevin
2
@Kevin: Je suis d'accord pour les jeux généraux, mais pas pour les scrollers infinis générés de manière procédurale. Par exemple, dans un défilement vertical, vous devrez soit continuer à générer de nouvelles boîtes et faire disparaître les boîtes hors écran, soit vous devrez continuer à mettre à jour les boîtes au fur et à mesure que la caméra se déplace. Comme la condition de mort est directement liée au fait de "ne pas rester à huis clos", il est logique de lier la condition à la caméra. Il est également plus efficace d'effectuer un contrôle des limites de la caméra, plutôt que de générer de nouveaux objets et de recourir au contrôle des collisions.
Jelle van Campen
2

Alternativement à la vérification des coordonnées verticales , vous pouvez simplement vérifier la vitesse verticale. Si le personnage est en train de tomber plus vite que d'un certain seuil, conclure qu'ils sont morts (même s'il est un peu assez de faible plate - forme pour atteindre encore, l'impact serait fatale).

Bien sûr, cela ne fonctionne que si votre jeu implémente correctement la physique de base de la chute libre, c'est-à-dire que la vitesse vers le bas augmente réellement pendant la chute, comme elle le fait dans la réalité (jusqu'à la vitesse terminale).

à gauche
la source
1

Si vous avez la hauteur des piliers, vous pouvez trouver la plus basse existante et la comparer à la position verticale du joueur. S'il est en dessous du pilier le plus bas, il n'y a aucune chance qu'il puisse revenir. Vous ne pouvez limiter ce contrôle qu'aux piliers situés derrière et devant le joueur.

Exemple: Nous avons 3 piliers, avec des hauteurs [10, 20, 40]. Le joueur a sauté est sur le pilier avec une hauteur de 40, il saute en avant à 20. Il se sentait entre 40 et 20, il est maintenant à la hauteur de 15. Cela signifie qu'il s'est senti. Pour un contrôle moins strict, attendez qu'il soit en dessous de 10.

Polan
la source
Tous les piliers sont de même taille. C'est l'écart horizontal entre deux piliers qui varie :)
SanSolo
0

Comptez combien de temps un personnage est tombé. (c'est-à-dire depuis combien de temps ils se déplacent "vers le bas"). Une fois qu'ils sont tombés plus d'un écran de temps, ils sont par définition tombés de la scène, oui?

Allen Gould
la source