如何实现PlayerTimer随角色存活递增,死亡后重置为0?
解决外星人躲避游戏中PlayerTimer计时失效的问题
第一步:确认PlayerTimer的基础配置
先检查Timer节点的核心设置,这是最容易踩坑的地方:
- 确保用的是Timer类型节点,别误选成其他节点
- 在检查器面板把
Wait Time设为1.0(保证每秒触发一次计时) - 不要勾选
One Shot,需保持循环触发;也别勾Autostart,咱们用脚本控制启停时机
第二步:玩家节点的脚本实现(Godot 4/3通用逻辑)
把脚本挂在玩家节点上,关联PlayerTimer和TimerUI,核心逻辑就是:角色存活时启动计时器每秒递加,死亡时停止计时器并重置数值。
Godot 4 代码示例
extends CharacterBody2D @onready var player_timer = $PlayerTimer # 路径根据你的场景结构调整,比如TimerUI在主场景根节点就这么写 @onready var timer_ui = get_node("/root/Main/TimerUI") var current_time = 0 func _ready(): # 绑定计时器的超时信号 player_timer.timeout.connect(_on_timer_tick) # 绑定角色死亡信号(如果没有死亡信号,直接在死亡逻辑里调用_on_player_death即可) self.connect("death", _on_player_death) # 每秒触发一次,更新计时和UI显示 func _on_timer_tick(): current_time += 1 timer_ui.text = str(current_time) # 角色死亡时重置计时 func _on_player_death(): player_timer.stop() current_time = 0 timer_ui.text = str(current_time) # 游戏开始/角色复活时调用此函数启动计时 func start_game_timer(): current_time = 0 timer_ui.text = str(current_time) player_timer.start()
Godot 3 代码示例
extends KinematicBody2D onready var player_timer = $PlayerTimer onready var timer_ui = get_node("/root/Main/TimerUI") var current_time = 0 func _ready(): player_timer.connect("timeout", self, "_on_timer_tick") self.connect("death", self, "_on_player_death") func _on_timer_tick(): current_time += 1 timer_ui.text = str(current_time) func _on_player_death(): player_timer.stop() current_time = 0 timer_ui.text = str(current_time) func start_game_timer(): current_time = 0 timer_ui.text = str(current_time) player_timer.start()
第三步:排查常见失效原因
- 节点路径错误:用
print(get_node_or_null("/root/Main/TimerUI"))测试,输出null说明路径不对,换成场景里的正确相对/绝对路径 - 信号未绑定:要么用代码绑定,要么直接在编辑器里把PlayerTimer的
timeout信号拖拽到脚本的_on_timer_tick函数上 - 计时器未启动:游戏开始或角色复活时,必须调用
start_game_timer(),否则计时器不会运行 - 死亡逻辑未触发重置:如果你的角色死亡时没调用
_on_player_death(),直接把重置代码塞进你的死亡判断逻辑里就行
内容的提问来源于stack exchange,提问作者Bad Dev
相关产品推荐
相关产品推荐

