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


其工作原理如下:
脚本中的 function name{} 成为一个全局函数 , 这相当于 2.3 之前的工作方式
functionname{// code here}
function{} 可以用作表达式 , 允许您执行
explode =function{
instance_create_layer(x,y,layer,obj_explosion);
instance_destroy;
}
在 Create 事件中 , 甚至将其用作函数调用中的参数!
layer__begin("MyLayer",function{
shader_set (sh_brightness);
shader_set_uniform_f(shader_get_uniform(sh_brightness,"u_bright"),1);
});
layer__end("MyLayer",function{
shader_reset;
});
在另一个函数中/在脚本外的 function name{} 等效于:
self.name =function{};
可以更方便使用 。
任何在脚本内但在函数外的其他代码都将在游戏启动时运行;获取/设置变量将像 global.variable 一样工作:
show_debug_message("Hello!");// 在创建任何实例之前显示
variable ="hi!";// sets global.variable
// ...函数定义
允许它被用于任何初始设置 。
然而 , 请注意 , 这个程序在进入第一个房间之前就已经运行了 , 所以 , 如果你想生成实例 , 你会想使用 room_instance_add。
作为一个令人愉快的奖励 , 你现在可以不用 _execute 来调用存储在变量中的函数 。
functionscr_hello{
show_debug_message("Hello, "+argument0 +"!");
}
/// ...
varhi =scr_hello;
_execute(hi,"you");
hi ("you");// 新的! 与上面效果一样
现在 , 开始进行更有趣的补充 。
命名参数
函数语法的引入还带来了另一个奇妙的补充--命名的参数!
以前 , 咱得这么写:
functionarray_push{
var_arr =argument0,_val =argument1;
_arr[@array_length(_arr)]=_val;
}
或者
functionarray_push{
var_arr =argument[0],_val =argument[1];
_arr[@array_length(_arr)]=_val;
}
现在咱只需要这么写:
functionarray_push(_arr,_val){
_arr[@array_length(_arr)]=_val;
}
这使得可选参数也更容易--任何没有提供给脚本的命名参数都将被设置为未定义 , 这意味着咱可以这样写:
functionarray_clear(_arr,_val){
if(_val ==undefined)_val =0;
// 之前得这么写: var _val = argument_count > 1 ? argument[1] : 0;
var_len =array_length(_arr);
for(var_ind =0;_ind <_len;_ind++)_arr[@_ind]=_val;
return_arr;}静态变量
这些变量类似于 C++ 中的局部静态变量 。
也就是说 , 静态变量是持久的 , 但只在它所声明的函数中可见 。
这对任何需要函数特定状态的情况来说都是很好的 。
functioncreate_uid{
staticnext=0;
returnnext++;
}
functionscr_hello{

推荐阅读