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

Godot开发糖果消除游戏报Invalid get index 'x'错误求解

问题根因

你遇到的Invalid get index 'x'报错是代码里的变量引用错误导致的,和教程版本新旧关系不大,报错里的x是某次循环时随机数rand的具体取值,不是你代码里写了名为x的属性。

核心错误点:

  • 你在spawn_pieces()的while循环判断中,错误地对单个节点实例使用了数组下标访问:写了piece[rand].color。这里的piece是通过.instance()实例化出来的单个糖果节点,不是数组,不支持用[数字]的形式访问内部属性,Godot找不到对应数字命名的属性就会抛出无效索引的错误。正确写法应该直接访问实例的颜色属性piece.color。
  • 逻辑隐患:match_at()函数末尾只有pass,没有匹配时不会显式返回false,虽然靠null的隐式转换能跑,但容易埋下逻辑bug。
  • 额外注意:如果你后续升级到Godot 4,旧教程里的.instance()方法需要改名为.instantiate(),导出变量语法也要从export (int) var 变量名改成@export var 变量名: int,你当前没报编译错误说明用的是Godot 3版本,暂时不用调整。
修正后代码

修正后的spawn_pieces函数

func spawn_pieces():
    for i in width:
        for j in height:
            #choose a random number and store it
            var rand = floor(rand_range(0, possible_pieces.size()))
            var piece = possible_pieces[rand].instance()
            var loops = 0
            # 修正索引错误,同时把循环次数判断放前面避免无效计算
            while loops < 100 && match_at(i, j, piece.color):
                rand = floor(rand_range(0, possible_pieces.size()))
                loops += 1
                # 释放不符合要求的废弃实例,避免内存泄漏
                piece.queue_free()
                piece = possible_pieces[rand].instance()
            #instance that piece from the array
            add_child(piece)
            piece.position = grid_to_pixel(i, j)
            all_pieces[i][j] = piece

修正后的match_at函数

func match_at(i, j, color):
    if i > 1:
        if all_pieces[i - 1][j] != null && all_pieces[i - 2][j] != null:
            if all_pieces[i - 1][j].color == color && all_pieces[i - 2][j].color == color:
                return true
    if j > 1:
        if all_pieces[i][j - 1] != null && all_pieces[i][j - 2] != null:
            if all_pieces[i][j - 1].color == color && all_pieces[i][j - 2].color == color:
                return true    
    # 无匹配时显式返回false
    return false

其余代码不用改动,替换后即可正常运行,初始生成糖果时不会出现连续3个同色的情况,也不会再抛索引错误。

内容的提问来源于stack exchange,提问作者RodLod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:27:25