Godot 4 get und set position von einem characterbody 2d?

1 Antwort

kommt drauf an, was du damit machen willst - wenn du die Position des Spielers in einer Scene ermitteln willst:

var pos: Vector2 = player.global_position
player.global_position: Vector2 = pos

aber richtig Sinn macht das nicht - außer du willst in von einem anderen Script oder Node auf die position zugreifen

du kannst das Ganze natürlich auch mit position, anstatt mit global_position machen - schreib mal genau, was du vorhast - das kann man besser helfen

Gamer4214 
Fragesteller
 07.09.2023, 23:47

ich möchte die spieler position in einem spiel mit mehreren welten ermitteln und bei pause oder menü abfragen wo die position ist und sie dann wieder abrufen. das der spieler nicht am anfang ständig spawnt.

deshalb muss diese abfrage im spielercode sein, weil ich sonst in jeder welt neu ermitteln muss.

vielleicht gibt es ja irgendwas mit get tree was über den spieler tree hinausragt um trotzdem noch eine abfrage die im spieler skript zu haben.

0
paaauleee  08.09.2023, 00:06
@Gamer4214

Ah ok - nur um zu verstehen - deine einzelnen Welten sind jeweils eine Scene (inklusive SpielerNode und was man sonst so sieht und braucht und pipapo) - und sagen wir ma der Spieler steht auf global_position(100, 100) in Welt_02 rum und genau dieser Wert (Spielerposition(100, 100) soll auch an Welt 3 weitergegeben werden?

1
Gamer4214 
Fragesteller
 08.09.2023, 10:27
@paaauleee

äh nein, nicht ganz. kommt darauf an welche welt. das pause menü ist in deinem beispiel welt 3. bei der richtigen welt 3 spawnt er natürlich bei vector 0 0

0
paaauleee  09.09.2023, 01:43
@Gamer4214

Ok :-) jetzt blick ich nicht mehr durch - beschreib mal genau - also wirklich Schritt für Schritt...was gemacht wird - also für Aussenstehende bzw Dumpfbacken wie mich - am Besten anhand einer Szene....

0
Gamer4214 
Fragesteller
 09.09.2023, 05:29
@paaauleee

ich bin in einem spiel. spawne auf der map am anfang. dann drücke ich pause. nachdem ich die pause entfernt habe, spawne ich wieder am anfang der map. ich sollte aber am gleichen ort sein wie vor dem pause drücken. das pause menü ist eine eigene datei (also change scene pause) in meinem fall.

0
paaauleee  09.09.2023, 23:53
@Gamer4214

Ah ok - ich denke, dass ich es kappiert habe - du kannst die Position des Spielers in einem globalen Script speichern - als Singleton. Dafür legste erstmal n Script an - kein Node oder so - wirklich nur ein Script - in diesem Fall kannste es "Globals.gd" nennen - gehst bei Project (ganz oben) - auf Project Settings - Autoload - lädst das Script und klickst anschließend auf "Add" - nun kannst von jeder Scene, jedem Node etc genau darauf zugreifen.
Dann legste ne Variable in dem globalen Script an - nennst sie zB "var global_pos: Vector2" - wenn du nun auf Pause drückst übergibst du die Postition des Spielers an diese globale variable - "Globals.global_pos = player.global_position" - "wenn die Szene nach der Pause wieder geladen wird - kannst du mit der _ready() Funktion, die dort hinterlegte Position abfragen und an den Spieler übergeben

0