Dans un jeu 2D à défilement, les objets doivent-ils bouger ou la caméra doit-elle bouger?

8

Je suis nouveau dans la conception de jeux et je ne sais pas vraiment comment les choses se font. Je pense à construire un jeu iOS où un navire doit voler le plus haut possible (à des vitesses variables), collecter des power-ups, et cetera, en cours de route.

Comment aller ici? L'arrière-plan et les éléments doivent-ils défiler vers le haut ou le navire doit-il vraiment voler en déplaçant la vue avec lui?

Thomas
la source
La seule bonne réponse est «les deux».
Blecki

Réponses:

6

Tout est relatif. Vraiment, vous transformez toujours votre vue par rapport à votre position de joueur fixe.

Donc, en oubliant l'écran pour l'instant, disons que vous avez ces 3 étapes (représentant les positions lors de leur mise à jour sur chaque boucle de jeu):

  1. playerWorldPosition = 50, 100; objectWorldPosition = 60, 200;
  2. playerWorldPosition = 55, 110; objectWorldPosition = 60, 160;
  3. playerWorldPosition = 60, 120; objectWorldPosition = 60, 120;

(comme x, y dans chaque cas)

Comme vous pouvez le voir, le joueur vole vers le haut ou saute et se déplace légèrement vers la droite, tandis que l'objet (qui pourrait être un powerup) tombe tout droit. Le joueur attrape la mise sous tension. Maintenant, comment dessinez-vous cela à l'écran?

Tout d'abord, supposons que vous souhaitiez que votre lecteur soit toujours au centre de l'écran. Ainsi, la vue se verrouille sur le joueur - c'est l'approche la plus simple à visualiser. La position de votre joueur sera alors toujours screenCentre(ie screenWidth/2, screenHeight/2). Comment obtenez-vous alors la position à l'écran d'autres objets dans le monde?

objectScreenPosition = (objectWorldPosition - playerWorldPosition) + screenCentre;

Vous pouvez voir que cette formule fonctionne même pour le joueur réel, car (playerWorldPosition- playerWorldPosition) + screenCentreest égal à screenCentre. Vous pouvez donc appliquer la même formule à chaque entité de votre jeu, en parcourant une liste. Vous pouvez utiliser cette approche simple pour développer d'autres choses (comme le décalage de la caméra, les cas où vous êtes dans le coin d'un niveau, etc.)

Ingénieur
la source
Et s'il y a zéro ou plusieurs objets joueurs? Et si vous voulez faire des effets spéciaux comme le bougé de l'appareil photo? Même si les mathématiques se ressemblent, ce n'est vraiment pas la même chose. Et ce n'est ni l'un ni l'autre. Les objets bougent et la caméra bouge aussi.
Blecki
1
@Blecki ... Vous dites, après l'acceptation de la réponse. Si vous pensez vraiment qu'ils sont si différents, vous devez avoir du mal à configurer vos vues. Allez écrire votre propre réponse concise sur les transformations de vue qui traitent de tous les cas d'angle, alors. Personne ne vous arrête.
Ingénieur
Vous avez une caméra, elle a une position, vous créez une matrice de vue. Il n'y a pas de cas d'angle.
Blecki
1
@Blecki Maintenant, vous vous contredisez. "Et si vous voulez faire des effets spéciaux comme le bougé de l'appareil photo?"
Ingénieur
1
@Blecki. Correct. Heureux que nous soyons d'accord.
Ingénieur