array|译:Gamemaker Studio 2.3 语法详解( 九 )


if(n ==0)return0;// 空/不是一个数组
for(vari =0;i <n;i++)if(is_array(arr[i]))returnn;
return1;// 里面没有数组
}
(只有当数组包含子数组时才会返回 > 1 )
但是这仍然会对包含 1d 数组的 1d 数组产生误报 , 因为现在 2d 数组就是这样 。
默认返回值
以前 , 如果脚本/函数没有返回任何东西 , 则脚本/函数调用会返回 0。
现在它们会返回 undefined。
这通常是一个很好的变化 , 因为 GameMaker 在很多地方仍然使用数字 ID (忘记返回一个值可能会导致你使用一个有效但不相关的结构 , 索引为 0 ) , 但可能会打破旧的代码 , 这些代码只能通过偶然的机会真正起作用 。
在 2.3.1 中 , 一些内置函数也同样被修改为如果它们不应该返回任何东西 , 则返回 undefined (以前也是 0 ) 。
self/other值
在 GameMaker≤8.1 时代 , 写
show_debug_message(self);
show_debug_message (other);
将分别显示 -1 和 -2, 这在大多数函数中被视为一种特殊情况 。
这在 GMS1 中被改变了 , 相当于 self.id 和 other.id。
现在这一点又被改变了 ,self/other 现在给你提供了实例“ structs ”--所以
hi ="hello!";
show_debug_message (self);
现在将显示 { hi : "hello!" }。 这有一些影响 。

  • self-struct 不等于 self.id, 所以依赖它的旧代码会被破坏 。 (在这种情况下 , 对 self 的使用最好用 self.id 代替) 。
  • 与通过 ID 引用不同 , 使用实例结构 , 即使实例已经通过 instance_destroy 从房间中移除 , 你也可以使用实例变量(但仍然可以使用 instance_exists 检查它是否在房间中) 。
Prefix-ops as then-branch
这种
if(condition)++variable;
这种
if(condition)--variable;
由于各种新的句法结构造成的歧义 , 不再允许使用 , 这使得很难判断您的意思是 if (condition)++ (条件表达式的后增量) 还是 if (condition) ++ (在 then-branch 表达式上预增量) 。
如果您想要个人看法 , 我宁愿禁止将 (variable)++ 等同于 variable++ - 我认为我没有看到在任何项目中有意使用这种构造 。
无论如何 , 这很容易解决 。
array[$hex]
image_index
以前 ,image_index 被允许溢出 image_number, 这将使它在绘图时循环( image_index % image_number ) 。
在 2.3 版本中 , 试图分配 image_index 超过 image_number 时 , 会在分配时将其循环回来 , 这意味着:
sprite_index =spr_3_frames;
image_index =4;
show_debug_message (image_index);
将显示 1 而不是 4。
在大多数情况下 , 这是无害的 , 并修复了一些与在游戏启动时保存越来越大的索引有关的奇怪现象 , 但这确实意味着 , 像

推荐阅读