Jo, also nochmal kurz: Trenne Deine Daten von Deiner Anzeige.
Stell Dir mal vor, Du würdest aus Deiner momentanen Lösung eine 2-Spieler-Variante machen. Dann bräuchtest Du ja auch zwei Kamera-Ansichten. Und wie würdest Du das bitteschön machen, wenn Du jedesmal den Hintergrund bewegst statt dem Spieler?
Also im Klartext: Du hast ein Weltmodell (also eine Karte und Objekte und deren Positionen), und das muß stimmen. Wenn der Spieler sich bewegt, dann bewegt sich der Spieler. Wenn sich eine Wand bewegt, dann bewegt sich die Wand. Das erstmal zum einen, so ist es in der realen Welt schließlich auch.
Dann kommt die Ansicht dazu. Ob Du ein Foto von der Spitze des Eiffelturms schießt, oder ob Du unten vom Platz aus die Spitze des Turms fotografierst, hängt einzig und allein von der Kameraposition ab. Der Turm steht immer noch an der gleichen Stelle.
Das heißt, Deine Grafikroutinen müssen das ganze einfach nur in den richtigen Kontext bringen. Sie holen sich vom Weltmodell die Daten (also die tatsächliche Position des Spielers), und richten dann rein beim Anzeigen alles danach aus.
Wichtig ist, daß sich beim Anzeigen keine Daten im Weltmodell ändern. Das Weltmodell hat das Sagen
Im Grunde würdest Du also ungefähr so vorgehen (pseudo-code):
Code: Alles auswählen
cameraX = playerX - (screenWidth / 2) + (playerWidth / 2)
cameraY = playerY - (screenHeight / 2) + (playerHeight / 2)
for each tile or object:
x = tileX - cameraX
y = tileY - cameraY
renderSprite(tileSprite, x, y)
Natürlich gehört auch der Player selbst zu den Objekten. Dieser wird völlig automatisch nun an der richtigen Stelle gezeichnet.
Behalte das auf jeden Fall im Hinterkopf: Daten und deren Anzeige sind was völlig verschiedenes und sollten nicht in einen Topf geworfen werden. Ganz einfaches Beispiel: Du hast eine Tabelle mit den Monatsgehältern Deiner Mitarbeiter. Jetzt willst Du die grafisch mit Balken darstellen. Aber nun ist es zu klein, und Du willst die Balken doppelt so groß machen. Dann ist das eine Sache der Anzeige. Du solltest möglichst NICHT auf die Idee kommen, einfach nur die Gehälter zu verdoppeln (es sei denn, Du willst Dich bei Deinen Mitarbeitern beliebt machen

).