问题描述
我是 Godot 的新手,我正在研究 Godot 的 TPS 演示。我试图修改敌人脚本,以便当所有敌人都死了它会自动进入主菜单。 这是我所做的 初始化一个变量
var asf=1
比里面的hit函数
func hit():
if dead:
if asf==5:
get_tree().change_scene("res://menu/menu.tscn")
return
animation_tree["parameters/hit" + str(randi() % 3 + 1) + "/active"] = true
hit_sound.play()
health -= 1
if health == 0:
dead = true
asf+=1
//and so on
但是它不起作用,当我尝试向下移动并在关卡加载后立即删除 if 条件时,它会返回到主菜单 看到这个:
func hit():
if dead:
return
animation_tree["parameters/hit" + str(randi() % 3 + 1) + "/active"] = true
hit_sound.play()
health -= 1
if health == 0:
dead = true
asf+=1
//and so on
get_tree().change_scene("res://menu/menu.tscn")
解决方法
GDScript 没有静态(也称为共享)变量。因此,每个敌人都有一个变量实例。如果有的话,这个变量只会变成 1,因为它所在的敌人只能死一次。
相反,向敌人添加信号。他们死后可以发出的信号。见Custom signals。
例如:
signal died
# ...
func hit():
# ...
if health == 0:
dead = true
emit_signal("died")
然后,您可以使用一个节点来跟踪有多少敌人死亡。将信号连接到该节点(来自 IDE,或来自带有 connect
的 GDScript)。每次收到信号时,您都会更新计数,并在适当的时候更改场景。