本页介绍有关使用脚本函数与方法的基本信息。
脚本函数使用以下语法创建:
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()不会增加内存占用,因为已经为你创建了方法。
同样,这只适用于你通过存储在变量中的引用间接调用脚本函数的情况。直接调用它并不会导致这样的问题。