脚本函数与方法

本页介绍有关使用脚本函数与方法的基本信息。

基本差异

脚本函数使用以下语法创建:

function name()
{
    code;
}

方法变量使用以下语法创建:

name = function()
{
    code;
}

你应该在脚本中使用第一种语法,以创建全局函数,可以从游戏中的任何范围调用。

结构/构造函数和对象中创建函数时,应使用第二种语法。此语法创建一个包含方法的变量。

直接调用

你可以通过使用括号()直接调用脚本函数和方法,就像运行时函数一样。

// Create the function
function reset_x()
{
    x = xstart;
}

// Call the function
reset_x();

你也可以使用函数script_execute()来运行一个脚本函数,尽管它现在是一个遗留函数,不推荐使用。

间接调用:方法

您可以在另一个变量中存储对方法的引用,以便稍后通过该变量调用该方法:

// Create method
reset_alpha = function()
{
    image_alpha = 1;
}

// Pass reference and call
temp_1 = reset_alpha;
temp_1();

注意看代码中没有把()放在reset_alpha后面。这是因为我们在读取方法的引用,而不是调用它。

在这个例子中,调用temp_1将调用reset_alpha,因为它存储了对该方法的引用。

以这种方式传递方法引用是完全正确的。但在使用脚本函数时,需要注意。

间接调用:脚本函数

你也可以把对脚本函数的引用,存储在另一个变量中。

// Create function
function reset_x()
{
    x = xstart;
}

// Store reference
temp_1 = reset_x;

现在,您可以通过执行以下操作来调用temp_1

temp_1();

但是,由于此变量引用脚本函数,因此它必须先将其转换为方法,然后再调用它。

这很容易导致内存使用量增加,尤其是在你每帧调用它时,因为引擎现在必须为这个调用每帧创建一个新方法。

那么,解决方案是什么?

要实现第二种解决方案,您的代码将如下所示:

temp_1 = method(undefined, reset_x);

这是从reset_x脚本函数中创建一个新方法,使用method()

现在使用圆括号调用temp_1()不会增加内存占用,因为已经为你创建了方法。

同样,这只适用于你通过存储在变量中的引用间接调用脚本函数的情况。直接调用它并不会导致这样的问题。