Wie füge ich eine Scene mehrfach in eine andere und verändere ihre Position in Godot?
Die Frage beschreibt eigentlich alles. Ich möchte in Godot eine Scene in eine andere mehrfach einfügen und jedesmal die position verändern. Das ist mein Versuch:
extends Control
var participants = Main.participants
var participants_even
var participants_odd
var num_of_double_panels
var num_of_single_panels
var double_panel = load("res://DoublePanel.tscn").instance()
var single_panel = load("res://SinglePanel.tscn").instance()
var position_x = 180
var position_y = 140
func _ready():
var participants_length = participants.size() - 1
if participants_length % 2 == 0:
participants_even = true
participants_odd = false
elif participants_length % 2 == 1:
participants_even = false
participants_odd = true
if participants_even == true:
num_of_double_panels = participants_length / 2
num_of_single_panels = 0
for i in(num_of_double_panels):
num_of_double_panels -= 2
double_panel.position = Vector2(position_x, position_y)
add_child(double_panel)
position_x *= 1.5
position_y *= 1.5
pass
Das Problem, was ich habe ist, das die Position von dem ersten eingefügten Panel auch zu der von dem zweiten ändert. Also alle Panels sind immer auf der gleichen Position.
Irgendwelche Ideen?
1 Antwort
Du kannst in der Szene, die du als Instanz laden möchtest, zB n PositionsVector() als export vergeben - dann kannst du lädst du die Szene manuell im SzeneTree rein und kannst für jede Instanz die Position manuell anspassen
#Szene die instanziert werden soll:
@export var pos: Vector2
oder du musst dass direkt in der Szene, die die Instanzen laden soll in der _ready() Funktion machen:
func _ready():
var instanz_01 = preload(Pfad zur Instanz).instantiate()
intanz_01.global_position = Vector(wertx,werty)
add_child(instanz_01)
var instanz_02 = preload(Pfad zur Instanz).instantiate()
instanz_02.global_position = Vector(wertx, werty)
add_child(instanz_02)
usw
Das könnteste mit einer Schleife machen - in dem Fall wohl eher "while" - da kannste dann einmal die Szene als Instanz laden und den Positionsvector - naja, da müsste man schauen, wie du das positionieren, also nach welchem Muster, willst....
Wenn du allerdings irgendwann nach dem starten, die Teilnehmer Zahl kennst, dann kannste das auch in eine For Schleifen packen - und gibst als range - die TeilnehmerAnzahl an - dann wird für jeden Teilnehmer eine Instanz erstellt....
ist an sich eine gute Idee, habe aber eine andere Lösung gefunden.
Ich habe einfach ganz viele Panels schon so erstellt und werde einfach die, die ich nicht brauch unsichtbar machen. Ist keine schöne Lösung aber funktioniert
aber ich weiß ja wenn ich das programm starte noch nicht, wie viele ich laden möchte. Ich bekomme ein Zahl wie viele teilnehmer ich habe, gucke ob diese gerade oder ungerade ist und füge dann für 2 teilnehmer eine Instanz. Daher kann ich vorher noch nicht wissen wie viele "var = instanz_01, 02, etc." ich ein muss.
Ich glaube das Problem was ich habe ist, dass auch die Position von der alten insctance geändert wird.