当玩家在一个关卡中死亡时,他们在该关卡中拾取的所有硬币将重置为0,而其他关卡的硬币总数保持不变。我的问题是,每当我的玩家击中一个尖峰时,他们通常会同时击中两个尖峰,这会导致关卡中当前硬币的数量增加一倍。
这是我的尖峰代码:
extends Area2D
signal kill
func _on_spike_body_entered(body):
if body.name == "Player":
emit_signal("kill")
每当玩家击中一个钉子,钉子就会发出一个叫做"杀死"的信号,这个信号被发送到主游戏脚本。
这是我的主要游戏代码:func _on_spike_kill():
Global.coins = Global.coins - current_coins
get_tree().reload_current_scene()
当游戏主脚本接收到信号时,收集到的硬币总数减去当前关卡中捡到的硬币,然后场景重置。例如,如果玩家在关卡中收集了5个金币,那么如果玩家击中了尖峰,就会从金币总数中减去5个金币。但是,如果玩家同时击中两个尖峰,则从总金币中减去10个金币。
有人能帮帮我吗?
我试着把尖刺的击中框变小,这样玩家就不能同时击中两个尖刺,但这行不通。同样的事情继续发生。
这里有几个想法,但最简单的可能是设置一个标志,表明玩家当前是活着还是死了,只有当他们死了才处理_on_spike_kill()
。这也将防止重载函数被多次调用。
func _on_spike_kill():
if Global.player_active:
Global.player_active = false
Global.coins = Global.coins - current_coins
get_tree().reload_current_scene()
然后在reload_current_scene()结束时,或者当玩家获得控制权时主循环开始时,设置Global.player_active = true
。这也可以用来防止诸如用户输入移动角色时,场景仍在加载等问题。
编辑:切换更新player_active和coins的顺序,以避免竞争条件。如果player_active可以在条件检查中设置为False就更好了