Alles ist relativ. Wirklich, Sie verändern Ihre Ansicht immer relativ zu Ihrer festen Spielerposition.
Wenn Sie also den Bildschirm vorerst vergessen, nehmen wir an, Sie haben diese drei Schritte (die Positionen darstellen, die in jeder Spielschleife aktualisiert werden):
playerWorldPosition = 50, 100; objectWorldPosition = 60, 200;
playerWorldPosition = 55, 110; objectWorldPosition = 60, 160;
playerWorldPosition = 60, 120; objectWorldPosition = 60, 120;
(jeweils als x, y)
Wie Sie sehen können, fliegt der Spieler nach oben oder springt nach oben und bewegt sich leicht nach rechts, während das Objekt (möglicherweise ein Powerup) gerade nach unten fällt. Der Spieler fängt das Powerup. Wie zeichnet man das auf dem Bildschirm?
Nehmen wir zunächst an, Sie möchten, dass sich Ihr Player jederzeit in der Mitte des Bildschirms befindet. Die Ansicht bleibt also für den Player gesperrt - dies ist der einfachste Ansatz zur Visualisierung. Die Position Ihres Spielers ist dann immer screenCentre
(dh screenWidth/2, screenHeight/2
). Wie erhalten Sie dann die Bildschirmposition anderer Objekte auf der Welt?
objectScreenPosition = (objectWorldPosition - playerWorldPosition) + screenCentre;
Sie können sehen, dass diese Formel auch für den tatsächlichen Spieler funktioniert, da (playerWorldPosition- playerWorldPosition) + screenCentre
gleich ist screenCentre
. Sie können also dieselbe Formel auf jede Entität in Ihrem Spiel anwenden und eine Liste durchgehen. Sie können diesen einfachen Ansatz verwenden, um auf andere Dinge aufzubauen (z. B. Kameraverzögerung, Fälle, in denen Sie sich in der Ecke eines Levels befinden usw.).