GDScript钓鱼机制脚本无法正常加载,请求问题排查
钓鱼机制脚本问题修复方案
问题根源
- 主线程阻塞:
_input函数里的while循环配合await会卡死事件处理流程,Godot主线程被占用后无法响应任何操作,导致脚本看似"无法加载"。 - 初始无内容:原代码仅在玩家按下按键时才生成随机字母,启动阶段没有初始化显示逻辑。
- 逻辑顺序错误:玩家按下按键时才生成新字母,导致按键判断和当前显示的字母完全不匹配,逻辑完全颠倒。
修复后的代码
extends Label var letters: Array[String] = ["Q", "W", "E", "R"] var cletter: String var fish_health = 100 var current_keycode: int var is_processing = false # 防止重复触发输入处理 func _ready(): # 初始化时就生成第一个字母,确保启动就有显示 generate_new_letter() func _input(event): # 如果正在处理上一次输入(等待倒计时),直接忽略新输入 if is_processing or fish_health <= 0: return if event is InputEventKey and event.pressed: is_processing = true # 判断按键是否正确 if event.keycode == current_keycode: fish_health -= 10 text = "YAY! 鱼生命值: " + str(fish_health) else: fish_health += 10 # 限制生命值不超过初始值100 fish_health = min(fish_health, 100) text = "NO! 鱼生命值: " + str(fish_health) # 等待2秒后,要么生成新字母,要么显示鱼死亡 await get_tree().create_timer(2).timeout if fish_health <= 0: text = "鱼已被钓上来!" else: generate_new_letter() is_processing = false func generate_new_letter(): # 生成随机字母并更新显示和对应的按键码 cletter = letters.pick_random() text = "请按下: " + cletter current_keycode = OS.find_keycode_from_string(cletter)
关键改动说明
- 用
_ready()初始化显示,启动时就生成第一个字母。 - 新增
is_processing变量,防止玩家在倒计时期间重复按键触发逻辑。 - 将字母生成逻辑抽成独立函数
generate_new_letter(),逻辑更清晰,可复用。 - 调整输入处理顺序:先判断当前显示字母的按键是否正确,再更新生命值,最后等待后生成新字母(或结束)。
- 限制鱼的生命值不超过初始的100,避免错误按键导致生命值无限上涨。
内容的提问来源于stack exchange,提问作者Gelya
相关产品推荐
相关产品推荐

