array|译:Gamemaker Studio 2.3 语法详解


array|译:Gamemaker Studio 2.3 语法详解
文章图片

作者:Vadim(aka YellowAfterlife)
译:highway★
原文链接:https://yal.cc/gamemaker-2-3-syntax-in-details/

译注:从 2.3 更新之后基本没怎么碰过 GMS2 , 重新开启 GMS2.3 之后很多新加的东西都没咋看过对很多新东西有些恐惧 , 总是一拖又拖 , 这篇文章讲的很细致 , 比起看视频也节省一些时间 。 搬运过来 , 希望能对同样使用 GMS2 , 特别是我这种对 2.3 比较懵逼的人有些帮助 。
Chained accessors(链式访问器) 长期以来 , GameMaker 一直允许少量的 "访问器 ",
// 正常 array 操作:
val =an_array[index];
an_array[index]=val;
// 非写入时复制操作(non-copy-on-write):
an_array[@index]=val;// 等同于 array_set(an_array, index, val)
// ds_map:
val =a_map[?key];// 等同于 val = ds_map_find_value(a_map, key)
a_map[?key]=val;// 等同于 ds_map_set(a_map, key, val)
// ds_list:
val =a_list[|index];// 等同于 val = ds_list_find_value(a_list, index)
a_list[|index]=val;// 等同于 ds_list_set(a_list, index, val)
// ds_grid:
val =a_grid[#x, y]; // 等同于 val = ds_grid_get(a_grid, x, y)
a_grid [#x, y] = val; // 等同于 ds_grid_set(a_grid, x, y, val)
GMS 2.3 这些基础上稍作了扩展 , 允许将它们链接在一起--所以我们现在可以这样写:
list_of_maps[|i][?"hi"]="hello";
来替代以前的写法:
ds_map_set(ds_list_find_value(list_of_maps,i),"hi","hello");
对于嵌套数据结构和多维数组 , 这么写很方便 。
Array 的改动
2D 数组现在只是嵌套的 1D 数组 , 你可以更容易地创建更高维数的数组 。
array_1d[0]="hi!";// 没有改动
array_2d [1][0]="hi!";// 以前这么写 array_2d[0, 0] = "hi!"
array_3d[2][1][0]="hi!";// 新加的!
// ...等等
Structs
Structs 就像实例(instance) , 但没有任何事件或内置变量 。 非常轻便 。
我们可以通过使用 {} 来创建一个空结构 。
varq ={};
show_debug_message (q);// { }
q .hi ="hello!";
show_debug_message (q);// { hi : "hello!" }
q .one =1;
show_debug_message(q);// { hi : "hello!", one: 1 }
你也可以通过指定名称预先填入一些字段name:value:
varq ={a:1,b:2};
show_debug_message(q);// { b : 2, a : 1 }
q .c =3;
show_debug_message (q);// { c : 3, b : 2, a : 1 }
与 array 类似 ,Structs 由 GMS2 自动管理 , 这意味着你不必像对待实例那样明确地销毁它们 。
Structs 可以像之前我们在实例上那样的用法一样 , 比如我们可以 with(a_struct), 尽管我们不能以这种方式遍历 struct 中的每一个 "实例"--我们需要将它们添加到一个 array 或 list 中 。

推荐阅读