2d 阵列 gamemaker2 工作室

Posted

技术标签:

【中文标题】2d 阵列 gamemaker2 工作室【英文标题】:2d array gamemaker2 studio 【发布时间】:2018-12-07 03:37:23 【问题描述】:

经验丰富的程序员在玩 Gamemaker2 Studio。

尝试使用二维数组在屏幕上绘制一些随机方块来存储“地图”

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

第 2 步:在 Map[]=1 中设置 100 个随机位置,这可行

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

它崩溃了: **执行错误 - 变量索引 [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) 
  

【问题讨论】:

【参考方案1】:

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 中。

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

【讨论】:

谢谢斯特罗姆。我永远不会猜到,而且它肯定不容易解决,数组是这样工作的。没有办法像大多数语言和 Dim Map[20,20] 那样使用所有空白值设置它?您必须循环并设置所有值,否则它们不存在?奇怪... 请注意,在 GM 中扩展数组可能会很慢 - 如果您在 for 循环上方添加该行 MyMap[25,25]=99;,您会发现它的生成速度要快得多(GM 不必扩展数组每次都这样:) )

以上是关于2d 阵列 gamemaker2 工作室的主要内容,如果未能解决你的问题,请参考以下文章

如何创建2D数组阵列?

fftw 来自幅度和相位阵列的 C++ 逆二维 FFT

水平堆栈2d Numpy阵列与3d Numpy阵列

将蒙版阵列 2d 应用到 3d

javascript 制作2D阵列

javascript 展平2D阵列