繁体   English   中英

2D阵列GameMaker2 Studio

[英]2d array gamemaker2 studio

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

尝试使用2D数组在屏幕上绘制一些随机正方形以存储“地图”

步骤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) }
  }
}

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的整数。)

您应该在“创建事件”,另一个火灾或受控火灾事件中具有上述代码,并将绘制循环移动到“绘制事件”中。

所有绘图调用都应在Draw事件中。 如果整个块都处于“绘制”状态,它将在每个步骤中随机分配块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM