我的游戏突然无法记录点击/触摸

问题描述 投票:0回答:1

我正在学习使用 Godot 和 GDscript 制作三消游戏的教程。 (https://www.youtube.com/watch?v=YhykrMFHOV4&list=PL4vbr3u7UKWqwQlvwvgNcgDL1p_3hcNn2&index=1)

一开始我遇到了一些挑战,但当我下载旧版本的 Godot 时,很快就克服了这些挑战。所以现在,一切都很顺利,直到我到达第 9 部分。他创建了一个我们称为“func find_matches():”的函数,其中包含以下代码:

    for i in width:
        for j in height:
            if all_pieces[i][j] != null:
                var current_color = all_pieces[i][j].color
                if i > 0 && i < width - 1:
                    if all_pieces[i - 1][j] != null && all_pieces[i + 1][j] != null:
                        if all_pieces[i - 1][j].color == current_color && all_pieces[i + 1][j].color == current_color:
                            all_pieces[i - 1][j].matched = true;
                            all_pieces[i - 1][j].dim();
                            all_pieces[i][j].matched = true;
                            all_pieces[i][j].dim();
                            all_pieces[i + 1][j].matched = true;
                            all_pieces[i + 1][j].dim();
                if j > 0 && j < height - 1:
                    if all_pieces[i][j - 1] != null && all_pieces[i + 1][j + 1] != null:
                        if all_pieces[i][j - 1].color == current_color && all_pieces[i][j + 1].color == current_color:
                            all_pieces[i][j - 1].matched = true;
                            all_pieces[i][j - 1].dim();
                            all_pieces[i][j].matched = true;
                            all_pieces[i][j].dim();
                            all_pieces[i][j + 1].matched = true;
                            all_pieces[i][j + 1].dim();

添加此功能后,我的游戏在运行代码时不再记录任何点击/触摸。 我选择遵循接下来的一些部分,希望能够解决问题,但无济于事。我没有对代码进行任何更改,因此它们应该完全相同。 运行游戏时,这是我收到的错误消息: “获取索引‘8’无效(基于:‘数组’)” 有谁知道可能是什么问题吗?

正如我提到的,我尝试遵循接下来的几个部分(确切地说是第 12 部分)。除此之外,我查看了其他一些网站并询问了 gpt,得到的答案是我应该更改这部分代码: func make_2d_array():

    var array = [];
    for i in width:
        array.append([]);
        for j in height:
            array[i].append(null);
    return array;
To this:
func make_2d_array():
    var array = [];
    for i in range(width):
        array.append([]);
        for j in range(height):
            array[i].append(null);
    return array;

这没有帮助。

从那以后我一直很迷茫,一直找不到解决方案。 注意:这是我第一次使用 Godot 和 GDscript,所以我还在学习中。

debugging godot gdscript
1个回答
0
投票

假设

all_pieces
数组是根据
width
height
确定尺寸的,并且不知道导致异常的确切行(你能确认它是哪一行吗?),我想有问题的行是:

if j > 0 && j < height - 1:
    if all_pieces[i][j - 1] != null && all_pieces[i + 1][j + 1] != null: # <---- here

由于该行没有对

i
进行保护,并且
i
可以采用值
width - 1
,那么——根据我上面的假设——对
all_pieces[i + 1][j + 1]
的调用将导致索引越界您报告的错误。

我快速浏览了一下教程,看来您错过了第 9 部分 13:53 中他将

all_pieces[i + 1][j + 1]
更改为
all_pieces[i][j + 1]
的部分,所以我很确定我在这里提到的是你遇到的问题。

© www.soinside.com 2019 - 2024. All rights reserved.