layer_script_begin

使用此函数,可以将脚本函数指定给层,并在渲染该层之前调用该函数。向层添加函数时,以这种方式,它将在每个不同的绘制事件的开始运行,因此您可能希望签入分配的函数,哪个事件当前正在渲染,并调整代码以适应。这可以通过检查event_type和/或event_number(参见下面的扩展示例)来完成。请注意,函数不是意在在任何绘制事件或步骤事件中调用,而只是需要在房间创建代码或实例的创建事件/房间开始事件中的房间开始{}开始时调用。

 

语法:

layer_script_begin(layer_id, script);

参数类型描述
layer_idString or Layer目标层的唯一ID值(或作为字符串的层名)
scriptScript Function分配给层的脚本函数索引

 

返回:

N/A

 

扩展示例:

在这个扩展示例中,我们首先演示如何构造一个简单的脚本函数来设置一些着色器统一数据,这样绘制给定层时,该函数将运行,并且着色器将正常工作。在本例中,值得注意的是,我们如何检查正在调用的事件,以便函数的其余部分仅运行在本例中需要它工作的特定事件上,仅运行在主绘制事件上:

/// @function layer_shader_start();
function layer_shader_start()
{
    if (event_type == ev_draw)
    {
        if (event_number == ev_draw_normal)
        {
            colour_to_find = shader_get_uniform(sShaderDemo5, "f_Colour1");
            colour_to_set = shader_get_uniform(sShaderDemo5, "f_Colour2");
            shader_set(s_ColourChanger);
            shader_set_uniform_f(colour_to_find, 1, 1, 1);
            shader_set_uniform_f(colour_to_set, 1, 0, 0);
        }
    }
}

然后,在完成所有绘制后,我们将使用一个配套函数重置着色器:

/// @function layer_shader_end();
function layer_shader_end()
{
    if (event_type == ev_draw)
    {
        if (event_number == ev_draw_normal)
        {
            shader_reset();
        }
    }
}

既然我们已经定义了设置着色器的脚本函数,那么我们必须将它们分配给特定层,以便层知道调用它们。这将在房间创建代码中完成,或在某些控制器对象的创建事件或房间开始事件中完成(它们不需要每个步骤都设置,而是在房间开始或最初创建层时设置一次):

var lay_id = layer_get_id("Instances");
layer_script_begin(lay_id, layer_shader_start);
layer_script_end(lay_id, layer_shader_end);

最后一个代码块将脚本分配给层。