前言:
在iwanna的开发中,由于越来越需要程序语言的编写,故在学习GM开发语言相关的同时,记录于此,包含各种函数,脚本,事件,动作,游戏执行效果,以及一些游戏创建,房间生成算法等
基础函数:
// 注释单位
show_message(str) //显示一个对话框以输出信息。参数为一个字符串。弹出窗口时游戏会自动暂停。
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 表示粗斜体。
// 该函数是永久有效地设置字体,一旦执行,之后游戏的所有弹窗都会使用这个字体。
// 注意,要写在 show_message 前面!
string(val) // 返回实数 val 转换的字符串(转换字符换)。注:字符串可以用 + 号加在一起
get_integer(str, def) // 弹出窗口获取一个实数。str 是显示的信息,def 是默认参数。类似于python的input
get_string(str, def) // 弹出窗口获取一个字符串。str 是显示的信息,def 是默认参数。效果与 get_integer 类似。
message_input_font(name, size, color, style) //设置弹出框中输入框文字的字体。参数同 message_text_font。
show_question(str) // 弹出一个窗口,显示一个字符串,并且提供两个按钮:yes,no,玩家按下 yes 返回 1,按下 no 返回 0。
对象(Objects)
对象自身会带有一些变量,这些变量通常与对象自身的状态、属性、行为相关。例:
- x 对象的实例在房间的位置的x坐标。
- y 对象的实例在房间的位置的y坐标。
- speed 对象的实例的速度(单位:像素/步)。
- gravity 对象的重力(单位:像素/步²)。准确的说应该是对象的加速度。
- sprite_index 对象的实例的图像(精灵,Sprite)对应的索引(Index)。
GM 自带的变量会自动染上红色,切记自定义的变量名不能和自带变量的变量名冲突!
对象实例的创建
instance_create(x, y, obj) // 在房间的 (x, y) 的位置创造一个对象 obj 的实例,并返回这个实例的索引(ID)
alarm[0] = 50; // 这句话的意思是 50 步(帧)之后执行 alarm 0 事件(计时器0号事件)
speed = 6; // 注意:speed默认方向为向右,6像素/步
instance_destroy(); // 写入 对象离开游戏房间事件 ,实例对象在超出房间边缘时会自我销毁:
对象实例的交流
两个对象要如何实现数据的交流,方法之一就是使用成员运算符 .
就是一个小数点(和python使用方法类似)
对于单个实例的数据交流
inst = instance_create(100, 200, objBulletdu); // 创建objBulletdu对象
inst.speed = random_range(2, 8); // 令objBulletdu对象向右边随机移动的 2~8 的速度
alarm[0] = 50; // 50 步(帧)之后执行 alarm 0 事件(计时器0号事件)
// 利用 instance_create 函数会返回被创建的实例的索引的特性
(instance_create(100, 200, objBullet)).speed = random_range(2, 8); // 函数 instance_create 一定要用括号括起来
// 在已知索引的情况下,我们也可以直接使用索引来访问/修改这个实例的变量。
(100012).speed = 12; // 注意索引一定要用括号括起来👇
with语句
如果我们不只是想让对象/实例之间进行数据的交流,而是想让某个对象/实例命令另一个对象/实例执行一个函数或者一段代码呢?
with (obj/ID)
{
xxxx;
xxxxx;
}
GM自带的图像相关变量
image_speed = 0; // 值为0时表示实例的精灵不播放
// 值为 1 时表示播放速度为 1 张/帧
image_index = 1; // 一个精灵的图像都有各自的编号:精灵的第一张图像是 0 号,第二张图像是 1 号,第 n 张图像编号是 n-1,通常和 image_speed = 0; 一起使用,使精灵停留在某一张子图像上,很少单独使用。
image_single = k;
// 等效于:
// image_speed = 0;
// image_index = k;