Как создать копию объекта, а потом удалить только копию - GDScript
Я создаю копию таким кодом:
export var wave = {"count": 10, "interval": 0.5}
func _ready():
var posarr = []
var objectarray = []
var node = $Path2D/PathFollow2D/EnemyLvl1
var vector = Vector2(100, 100)
for x in range(0, wave.count):
posarr += [vector]
yield(get_tree().create_timer(wave.interval), "timeout")
if objectarray.size() <= x:
var obj = node
obj.position = posarr[x]
$Path2D/PathFollow2D.add_child(obj)
print("Main> Spawned")
objectarray.append(obj)
elif objectarray[x] == null:
var obj = node
obj.position = posarr[x]
$Path2D/PathFollow2D.add_child(obj)
print("Main> Spawned")
objectarray[x] = obj
Этот код должен создать 10 копий с интервалом в 0.5 секунд
Ничего не работает, а также когда я удаляю объект, то удаляются все копии
Как этого избежать? Вот код на удаление объекта:
onready var path_follow = get_parent()
export var speed = 1000
func _physics_process(delta):
move(delta)
func move(delta):
path_follow.set_offset(path_follow.get_offset() + speed * delta)
if path_follow.get_offset() >= 3700:
queue_free()
print("Main>EnemyLvl1> Despawned")
где parent это PathFollow2D
Вывод
Main> Spawned
Main> Spawned
Main> Spawned
Main> Spawned
Main> Spawned
Main> Spawned
Main> Spawned
Main>EnemyLvl1> Despawned
Invalid set index 'position' (on base: 'null instance') with value of type 'Vector2'.
Строка в которой ошибка:
if objectarray.size() <= x:
...
obj.position = posarr[x]
Ещё ничего не появляется на экране, хотя и пишет Main> Spawned
Как это исправить?
Ответы (1 шт):
Автор решения: xmurik
→ Ссылка
у тебя на все копии один скрипт. естественно, что они будут удалиться синхронно и все сразу. пытайся присвоить им каждому уникальный номер и добавить интервал между удалением копий с разными уникальными номерами.