如何在GML中一次性初始化整个数组?求对应实现示例
如何在GML中一次性初始化二维数组
嘿,完全懂你想要的那种清爽的数组初始化方式!在GML里确实能实现类似C语言那样的二维数组一次性赋值,不过得看你用的GameMaker版本,我给你掰扯清楚:
GameMaker Studio 2.3及以上版本(推荐)
2.3版本之后GML支持了更灵活的数组字面量语法,完全可以像你期望的那样直接嵌套初始化,写法几乎和你举的C语言例子一致:
// 局部变量的话加var,实例变量直接去掉var就行 var a = [[0, 1, 0], [0, 1, 1], [2, 1, 0]];
就这么简单!而且这个方法支持任意维度的数组嵌套,比如三维数组也可以这么写[[[1,2],[3,4]],[[5,6],[7,8]]],非常省心。
旧版本GameMaker(2.3之前)
如果还在使用2.3之前的老版本,嵌套数组字面量不被支持,那只能退而求其次,先创建外层数组,再逐个初始化内层:
// 先创建长度为3的外层数组 var a = array_create(3); // 给每个外层元素赋值一维数组 a[0] = [0, 1, 0]; a[1] = [0, 1, 1]; a[2] = [2, 1, 0];
要是碰到更老的版本(连一维数组字面量都不支持),那只能手动逐个元素赋值了:
var a = array_create(3); // 初始化第一个子数组 a[0] = array_create(3); a[0][0] = 0; a[0][1] = 1; a[0][2] = 0; // 初始化第二个子数组 a[1] = array_create(3); a[1][0] = 0; a[1][1] = 1; a[1][2] = 1; // 初始化第三个子数组 a[2] = array_create(3); a[2][0] = 2; a[2][1] = 1; a[2][2] = 0;
不过说实话,现在大部分人都在用2.3+版本了,第一种方法是最便捷的,和你想要的形式几乎一模一样,只是GML是动态类型语言,不用提前声明int类型~
内容的提问来源于stack exchange,提问作者Josef Buchko
相关产品推荐
相关产品推荐

