Seite 1 von 1

verschiebare 2D Map

Verfasst: 17.11.2007 00:55
von Gn00bi
hallo,
ich habe eine frage und zwar, wie ich es bewerkstelligen kann, das bei einen 2d spiel die spielfigur immer zentriert bleibt und sich nicht aus dem bildschirm herausbewegt, die anderen objekte aber ihre position "behalten"(die sollen sich also bewegen).
ich hoffe das war soweit verständlich wenn nicht fragt einfach nochmal^^
ich danke schonmal
PS.
1.
bbbbbbbbbbbbb
b...................b
b..........f.....h..b
bbbbbbbbbbbbb
1 2 3 4 5 6 7 8

2.
bbbbbbbbbbbbb
b...................b
b..h......f........b
bbbbbbbbbbbbb
6 7 8 9 10 11 12
b = bildschirmumrandung
f=figur
h= hindernis
vielleicht versteht man das so besser!

Verfasst: 17.11.2007 01:36
von STARGÅTE
jo ganz einfach ^^

du lässt die Berechnungen wie immer, also Objekte stehen , figur bewegt sich.

Aber bei der Anzeige, speicherst du erst mal die Position der Figur (dx, dy) zB.

Code: Alles auswählen

dx = Figur_X-HalbeBildschirmbreite
dy = Figur_Y-HalbeBildschirmhöhe
Die objekte werden dann nicht "normal" Angezeigt sonder so:

Code: Alles auswählen

DisplaySprite(Nummer, Objekt_X-dx, Objekt_Y-dy)
und die Figur dann auf:

Code: Alles auswählen

DisplaySprite(Nummer, HalbeBildschirmbreite, HalbeBildschirmhöhe)
fertig


EDIT: falls du es noch eleganter haben willst, also auch die drehungen relativ sind, kannst du dir mal mein BeispielCode angucken

Verfasst: 17.11.2007 07:08
von Bisonte
Ein relativ gut erklärtes ;) dingens über 2D Maps (womit Du wahrscheinlich
eine TileEngine meinst) findest du hier : http://www.purebasic.fr/german/viewtopi ... highlight=

Verfasst: 17.11.2007 16:33
von Gn00bi
ja vielen dank
genau das was stargate sagte meinte ich dankeschön

Verfasst: 17.11.2007 17:45
von ZeHa
STARGÅTE hat geschrieben:und die Figur dann auf:

Code: Alles auswählen

DisplaySprite(Nummer, HalbeBildschirmbreite, HalbeBildschirmhöhe)
Korrekter gesagt mußt Du die Figur hinterher nicht nochmal so "dreckig" anzeigen, sondern da Du Dir eine eigene Funktion fürs Anzeigen von Objekten machst, die die Berechnungen tätigt, zeigst Du die Figur einfach ganz normal so an, wie auch alle anderen Objekte. Die Spielfigur sollte nicht gesondert behandelt werden, sondern allen anderen Objekten gegenüber gleichberechtigt sein.

Am schönsten ist es, wenn Du Dir eine CameraX- und CameraY-Variable anlegst (entspricht dem dx und dy von Stargate), dazu einen Pointer auf ein beliebiges Objekt, und in jedem Schleifendurchlauf von diesem Objekt die X- und Y-Koordinaten ausliest und sie CameraX und CameraY zuweist (natürlich mit der Verschiebung relativ zur Bildschirmbreite und -höhe). Danach korrigierst Du diese Koordinaten am besten noch, falls die Kamera sich schon aus der Map herausbewegt. Zu guter letzt implementierst Du Deine "Objekt-Anzeige-Funktion", welche einfach beliebige Objekte anzeigen kann und sie immer mit CameraX und CameraY verrechnet (siehe Stargates erstes Beispiel mit DisplaySprite).

Mit dieser Vorgehensweise bist Du komplett flexibel und kannst die Kamera später im Programmverlauf auch auf ein beliebiges anderes Objekt setzen.

Wenn das zuviel sein sollte (wir sind ja im Anfänger-Forum) kann ich Dir gern auch noch genauer erklären, wie man das macht bzw. ein Codebeispiel zeigen.