译:Gamemaker Studio 2.3 语法详解( 七 )


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。
在大多数情况下 , 这是无害的 , 并修复了一些与在游戏启动时保存越来越大的索引有关的奇怪现象 , 但这确实意味着 , 像
if(image_index >=image_number){
image_index =0;
sprite_index =spr_other_sprite;
}
将不再触发 , 需要进行修改 。
buffer_get/set_surface
当导入旧项目到 2.3.1 时 , 你会经常看到以下错误 。
wrong number of arguments forfunctionbuffer_get_surface
wrong number of arguments forfunctionbuffer_set_surface
这是因为在 2.3.1 之前 , 这些函数有如下签名 。
buffer_get_surface(buffer,surface,mode,offset,modulo)
buffer_set_surface (buffer,surface,mode,offset,modulo)
而现在他们有了以下内容 。
buffer_get_surface(buffer,surface,offset)
buffer_set_surface (buffer,surface,offset)
有关这方面的更多信息 , 请见此文 。
结论和进一步阅读
请放心 , 2.3 的变化是非常令人兴奋的 , 并且拓宽了在 GML 中可以做的事情的视野 。 最值得注意的是 , 许多 Java 代码现在可以很容易地被移植到 GML 中 , 正如用户创建的库(如 GMLodash)所展示的那样 。

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。