varo ={
a_number :4.5,
a_string :"hi!",
an_array :[1,2,3],
a_struct:{x:1,y:2}
};
show_debug_message(json_stringify(o));
这会输出下面的信息:
{"a_string":"hi!","an_array":[1,2,3],"a_struct":{"x":1,"y":2},"a_number":4.5}
并将该字符串传递给 json_parse 会返回给我们一个嵌套 struct。
Functions
以前 , 每个脚本资源都将包含在调用时要运行的单个代码片段 。
像下面这样:
/// array_find_index(array, value)
/// @param array
/// @param value
var_arr =argument0;
var_val =argument1;
var_len =array_length_1d(_arr);
for(var_ind =0;_ind <_len;_ind++){
if(_arr[_ind]==_val)return_ind;
}
return-1;
但现在 , 情况不同了 - 我们可以在同一个脚本资源中有多个独立的片段 , 通过使用 function { } 语法来区分:
/// @param array
/// @param value
functionarray_find_index{
var_arr =argument0;
var_val =argument1;
var_len =array_length_1d(_arr);
for(var_ind =0;_ind <_len;_ind++){
if(_arr[_ind]==_val)return_ind;
}
return-1;
}
/// @param array
/// @param value
functionarray_push{
var_arr =argument0;
var_val =argument1;
_arr[@array_length(_arr)]=_val;
}
其工作原理如下:
脚本中的 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;
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
