我正在学习使用 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,所以我还在学习中。
假设
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]
的部分,所以我很确定我在这里提到的是你遇到的问题。