struct_get_names

此函数返回一个数组,其中包含结构中的变量名。

传入要检查的结构体引用,数组中的每个条目都将是该结构体包含的变量名的 String

注意 此函数不返回结构的 静态 变量。 这些属于其 静态结构 ,您可以使用 static_get 获取。

 

语法:

struct_get_names(struct);

参数类型描述
structStruct要检查的结构引用。

 

返回:

Array (each entry is a String)

 

示例1:基本使用

var _my_struct = {a: 7, str: "a string"};

var _arr_names = struct_get_names(_my_struct);
show_debug_message("Variables for struct: " + string(_arr_names));

var _str = "", _len = array_length(_arr_names);
for (var i = 0; i < _len; i++;)
{
    _str = _arr_names[i] + ":" + string(struct_get(_my_struct, _arr_names[i]));
    show_debug_message(_str);
}

上面的代码首先创建一个临时结构变量 _my_struct,其中包含两个变量:astr。 接下来,调用 struct_get_names 以获取包含给定结构的变量名称的数组。 这些都被显示出来。 最后,使用 for 循环循环遍历数组中的所有变量名称,并使用 struct_get 在结构体中按名称查找相应的值。 对于每个键值对,都会使用 show_debug_message 显示调试消息。

 

示例2:包含静态变量

function vec3(_x, _y, _z) constructor
{
    x = _x;
    y = _y;
    z = _z;
    
    static add = function(_vec2)
    {
        x += _vec2.x;
        y += _vec2.y;
        z += _vec2.z;
    };
    static dot = function(_vec2)
    {
        return dot_product_3d(x, y, z, _vec2.x, _vec2.y, _vec2.z);
    };
};
var _v1 = new vec3(100, 20, 0);

var _arr_names = struct_get_names(_v1), _arr_names_static = struct_get_names(static_get(_v1));
var _arr_names_all = array_concat(_arr_names, _arr_names_static);
show_debug_message($"Variable names for struct (including static): {_arr_names_all}");

上面的扩展示例显示了如何通过检索结构的静态结构并将这些变量名追加到变量名数组来包含静态变量名。

首先定义一个简单的 vec3 结构,其中存储 xyz 变量,以及两个静态方法 adddot。 由此创建一个新的结构体 _v1。 接下来,使用 struct_get_names 检索 _v1 及其静态结构的变量名称。 然后,通过调用 array_concat 连接两个数组。 最后,调试消息显示这个新数组的内容,其中包含结构体的 所有 变量名称。

注意 如果结构从静态结构的链或层次结构中获取静态变量,则需要遍历静态结构的链以获取 所有 静态变量的名称。