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):
playerWorldPosition = 50, 100; objectWorldPosition = 60, 200;
playerWorldPosition = 55, 110; objectWorldPosition = 60, 160;
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) + screenCentre
est é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.)