GameMaker8.0 新手教程 Part 6 -函数初步(下)-

分类栏目:gamemaker教程

762

GameMaker8.0 新手教程 Part 6 -函数初步(下)-

4、脚本(Scripts)

在GM中,脚本(Scripts)的实质是自定义的函数。

一个脚本的形式一般为:

{
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)的积。

{
var _product_x, _product_y;
_product_x = argument0 * argument2;
_product_y = argument1 * argument3;
return _product_x + _product_y;
}

如果这样写到:

xx = 5;
yy = 6;
ans = VectorValue(xx,yy,7,2);

这里ans就会被赋予向量(5,6)和(7,2)的向量积47。
当然其实只要一句话,写成{return argument0*argument2+argument1*argument3;}就可以实现的,在这里我只是为了写一个示范=w=

注意:return语句不仅代表返回一个值,也代表着函数的结束,只要执行到了return语句,不管return语句后面还有什么代码,都不会被执行。

一个脚本可以不接受参数,也可以没有return语句(即没有返回值)。
但是没有返回值的脚本不能用于赋值,或者运算。

脚本的命名规则一般以自身的用途为基准,如PlayerMove,SaveGame,InitializeGlobal之类的,遵循骆驼命名法。

5、简单的输入输出函数

本节对应GML汉化文档的67-68页。
GM中要想给玩家提供信息,或者从玩家处获取信息,该使用什么函数呢?
show_message(str);
显示一个对话框以输出信息。参数为一个字符串。弹出窗口时游戏会自动暂停。
例如,在房间的RCC(Room's creation code,房间创建代码)里写上show_message("Here is first room");
然后运行游戏:
emmm,字好像有点小,但是没关系,我们可以设置字体大小。
message_text_font(name,size,color,style);
设置弹出框里文字的字体。
name是指windows通常字体名字,如"Arial","Gigi","Meiryo",记住要用双引号。可以在控制面板->外观和个性化->字体查看有哪些字体名字。
size是指字体大小。
color是指形如c_red,c_green,c_blue的系统自带常量,具体可以使用哪些颜色,请参阅GML汉化文档的第46页。如果你懂得混色原理,你也可以用make_color_rgb(red,green,blue)来自定义颜色,用他的返回值作为color参数。
style是指字体样式,0表示默认,1表示粗体,2表示斜体,3表示粗斜体。
该函数是永久有效地设置字体,一旦执行,之后游戏的所有弹窗都会使用这个字体。
 
在上面的例子中,我们加上message_text_font("Mistral",15,c_red,0);(注意,要写在show_message前面)

string(val);
返回实数val转换的字符串。
 
例如:
show_message(string(5));
就会在弹出窗口中显示5。此处string(5)等效于"5"。
 
字符串可以用加号相加。
如:
a = 5;
b = 4;
show_message("a+b is " + string(a+b) + "!");
就会在弹出窗口中显示:a+b is 9!

提示:
a = 5;
无论是show_message(string(a));
还是show_message(a);
都是可以通过编译的。
同理:
show_message("16");
show_message(16);
也是一样的效果。
但是并不建议各位省略string函数或者省略双引号。提及这个,只是避免各位看到别人这么写的时候不知道这是什么情况。

get_integer(str,def);
弹出窗口获取一个实数。str是显示的信息,def是默认参数。
例如:
message_text_font("Arial",15,c_red,0);
a = get_integer("Input first number.", 5);
b = get_integer("Input second number.", 5);
show_message("Their sum is " + string(a+b) + "!");
message_input_font(name,size,color,style);
设置弹出框中输入框文字的字体。
参数同message_text_font。
 
show_question(str);
弹出一个窗口,显示一个字符串,并且提供两个按钮:yes,no,玩家按下yes返回1,按下no返回0,一般这样用:
if(show_question("A question here"))
{
xxxxx;//玩家点yes后执行的代码
}
else//可以没有else部分,如果要先判断玩家按no,则可以在show_question前加上逻辑非(!)
{
xxxx;//玩家点no后执行的代码
}
比如询问玩家是否退出游戏:
if(show_question("Exit game?"))
{
game_end();//game_end()函数用于结束游戏
}