在GM中,脚本(Scripts)的实质是自定义的函数。
一个脚本的形式一般为:
1
2
3
4
5
6
{
var _num1, _num2;
_num1 = argument0 + argument1;
_num2 = argument2;
return _num1 * _num2;
}
- 首尾最好有花括号。但实际上没有也不会有什么问题。事实上也有人建议 objects 里的代码段也要前后各一个花括号。喜欢写就写,不喜欢写就不写。
- 第一行在 var 后写一遍脚本中用到的所有变量(代表这些变量是临时变量,脚本执行完毕后,变量将自动销毁),不同变量名用逗号隔开。最后必须以分号结尾,否则会报错。
- 所使用的变量名以下划线开头,或者全部使用大写字母。(避免命名冲突)
- 通过 argument 来传递参数。例如,一个脚本,名字叫做 AddFourNumber,以
sum = AddFourNumber(12, 25, 44, 37);
(自定义函数的用法和 GM 自带的函数一致)调用这个脚本时,Add 的四个参数,12, 25, 44, 37,我们在脚本里就得用 argument 来获取,第一个参数为 argument0,第二个参数为 argument1,以此类推。注意第一个参数是 argument0,并且即使只有一个参数也要写 argument0 而不能写 argument。 - 通过 return 来返回一个值,这个值即是这个脚本的返回值。
- 脚本中允许直接使用对象的变量,而不通过 argument 传递(使用的对象的变量不用写在 var 后),但是这样有很大的隐患,因为脚本可以被任何对象使用,但是并不能保证所有的对象都有这个变量。所以除非是专门给某个特定对象使用的脚本,不应当使用脚本外部的变量。
示例:
写一个脚本 VectorValue,以 VectorValue(x1, y1, x2, y2)
的使用方法来计算并返回两个向量 (x1, y1) 和 (x2, y2) 的积。
1
2
3
4
5
6
{
var _product_x, _product_y;
_product_x = argument0 * argument2;
_product_y = argument1 * argument3;
return _product_x + _product_y;
}
如果这样调用:
1
2
3
xx = 5;
yy = 6;
ans = VectorValue(xx, yy, 7, 2);
这里 ans 就会被赋予向量 (5, 6) 和 (7, 2) 的向量积 47。
当然其实脚本只要一句话,写成 return argument0 * argument2 + argument1 * argument3;
就可以实现的,在这里我只是为了写一个例子。
注意:return 语句不仅代表返回一个值,也代表着函数的结束,只要执行到了 return 语句,不管 return 语句后面还有什么代码,都不会被执行。
一个脚本可以不接受参数,也可以没有 return 语句(即没有返回值)。但是没有返回值的脚本不能用于赋值,或者运算。
脚本的命名规则一般以自身的用途为基准,如 PlayerMove,SaveGame,InitializeGlobal 之类的,最好遵循驼峰命名法。当然也可以使用 GM8 库函数的蛇形命名法,如 player_move, game_save, global_init 等。