二维数组 gamemaker2 工作室

2d array gamemaker2 studio

熟练使用 Gamemaker2 Studio 的程序员。

尝试使用二维数组在屏幕上随机绘制一些方块来存储 "map"

第 1 步:声明一个二维数组 MyMap[25,25] 这有效

第 2 步:在地图中设置 100 个随机位置[]=1 这有效

当我尝试查找存储在数组中的值时发生崩溃。

它崩溃了: **执行错误 - 变量索引 [3,14] 超出范围 [26,14] **

所以看起来它正在尝试读取 26 个元素,当您从我的代码中看到 for next 循环仅转到 20 并且数组绑定为 25 时。

奇怪的是它执行前两个循环就好了?

看起来像一个错误,我花了很多时间试图解决它,有人知道发生了什么事吗?

var tx=0;
var ty=0;
var t=0;

MyMap[25,25]=99;                         **// Works**

for( t=1; t<100; t+=1 )                  **// Works** 
{
    MyMap[random(20),random(15)]=1
}


for( tx=1; tx<20; tx+=1 )
{
  for( ty=1; ty<15; ty+=1 )     
  { 
  show_debug_message(string(tx) + ":" + string(ty))
  t = MyMap[tx,ty];  ///  **<---- Crashes Here**
  if t=1 then {draw_rectangle(tx*32,ty*32,tx*32+32,ty*32+32,false) }
  }
}

MyMap[random(20),random(15)]=1没有初始化整个数组的值,创建了一个稀疏数组(其中一些元素不存在)。

MyMap[25,25]=99; 应阅读:

for( tx=1; tx<20; tx+=1 )
{
  for( ty=1; ty<15; ty+=1 )     
  {
    MyMap[tx,ty]=99;
  }
}

这会将所有数组值预初始化为 99。填充数组。

然后你可以随机分配。 (由于随机函数中的重复项和随机返回的零,您可能会得到不到 100 个。)

您应该在 Create Event 或另一个单发或受控发火事件中包含上述代码,并将绘制循环移动到 Draw Event 中。

所有绘制调用都应在绘制事件中。如果整个块都在绘制中,它会在每一步随机化块。