You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:30:02