极速入门Gamemaker编程语言
开篇废话
这文档适合已经会使用其他编程语言(C#、C\C++、java、python等)的游戏开发爱好者学习 (逛CSDN怎么会有不会编程的人呢) ,如果不会其他语言也可以看个大概,毕竟字不多,已经入门 GML 的新人也可以看看这个文档,或许能发现一些有趣的东西。
不建议元老巨佬等详细研究此文档,可能会看成《GML 急速出门》。
这份文档主要基于 GM 8.0,理论上大部分适用于GMS、GMS2,还请GMS、GMS2用户以实践为准。
文档写的略急促,如果发现有问题或讲错了敬请指出。
如果这文档反响不错,我打算完善好这个《GML极速入门》后再写些其他的极速入门系列,例如《Unity 急速转战 GM》或者反过来转。
作者联系方式:QQ 2293840045
目录
文章目录
GM软件的基本の基本
软件的左边一列(GMS2默认在右边)的文件夹是游戏的资源,例如游戏的图片(sprites
)、声音(Sounds
)、脚本(Scripts
)等,把准备好的素材导入到这里即可。
每一项资源可以再细分文件夹,这点随开发者喜好随意整就行。
资源经常要在代码中调用,所以资源的名称要符合标识符命名规则(例如数字不能开头不能包含特殊符号等)。
初学 GML 的时候可以建立一个游戏物体,添加 create (创建)事件,在这里面写代码(GM8和GMS要在右边找到代码小方块,拖到左边空白区域才行),然后创建一个房间,把这个物体放到房间里面。
觉得上面那个麻烦也可以新建房间,然后进房间设置,有个“房间创建代码”的按钮点开可以写代码,这里就像程序的 main 方法一样,一运行就执行。
GM中的面向对象
上面介绍的资源中,有一个 Objects ( GMS2 中文翻译可能叫“物体”)最为重要。
Object 可以直接理解为其他语言的 class ,而游戏中每生成一个物体,就是 new 了一次这个 class 的实例。
继承
GML 没有封装和多态(也可以说到处都是多态),但可以使用继承,在 object 物体编辑的面板上指定父物体即可。
这里的继承父物体是 class 继承父类的意思,而不是 Unity 中的物体父子级关系。
要注意,GML的继承和传统继承区别很大。
继承可以使子物体拥有父物体的变量,可以使子物体没有实现的事件由父物体实现。
很特殊的一点,传统的继承中,每 new 一个子类都会产生一个父类,而GM当中的父类可以永远不被实例化,但这并不影响子类继承父类成员。
重写
例如父物体在 step 事件中有x += 1
代码,他的子物体如果没有自己的 step 事件,则这个子物体也会在 step 事件触发时运行x += 1
。
但如果这个子物体存在自己的 step 事件,则不会再运行x += 1
了,如果想运行子物体的某个事件后(或前)再运行父物体的相同事件,则可以在子物体中需要运行父物体事件的位置调用event_inherited()
方法,就等同于 java 的super.xxx()
或者 C# 的 base.xxx()
。
即便子物体的 step 事件代码为一行注释,那么它也算作“子物体存在自己的 step 事件”。
至于为什么是一行注释而不是空代码呢,因为GM会自动删除没有代码(或注释)的事件,所以如果想“顶掉”父物体事件,写一行注释即可
//
基本的语法
GML的基础语法和C\C++、C#、Java这类语言极度相似,且作为一个专为游戏而生的语言,有相当多的特性用起来非常简单、舒服。
GML语言使用花括号{}
表示代码块,语句结尾可以加分号;
表示结束也可以直接换行。
和大部分语言一样使用点.
引用成员,例如Player.hp=0
就可以干掉玩家。
变量
GML是弱类型的语言,就是说使用变量无需指定数据类