verschiebare 2D Map

Anfängerfragen zum Programmieren mit PureBasic.
Gn00bi
Beiträge: 22
Registriert: 10.04.2007 16:00

verschiebare 2D Map

Beitrag 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!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag 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=
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Gn00bi
Beiträge: 22
Registriert: 10.04.2007 16:00

Beitrag von Gn00bi »

ja vielen dank
genau das was stargate sagte meinte ich dankeschön
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Antworten