编辑器模式
DND: Drag and Drop 通过可视化拖拽编辑游戏
DML: Game Maker Language 通过编程编辑游戏
游戏元素
room —> 对象Object —> 精灵Sprite
游戏中的声音
声音会占据磁盘大量空间
非压缩:WAV格式
压缩:MP3/OGG格式
游戏中的事件
- 创建活动:这个事件发生在第一次创建Object实例时,也是通过room编辑器放入room的实例中输入room时发生的第一件事。这意味着,这个事件是初始化变量、启动Timelines 、设置paths 等……以及其他任何通常只需要做一次或只在一个实例首次出现在room 的地方的理想场所。如:在游戏开始时设置一个倒计时
- 阶梯活动:GameMaker Studio 2将游戏时间分成几步,游戏速度定义了每秒钟应该有多少步。一个步骤,基本上就是loop ,在游戏运行时,所有的事件都被检查并在必要时被触发。 所以当实例存在时,步骤事件是一个在游戏的每一步都被检查的事件。步骤事件类别有三个子类别来 “微调 “实例中的时间, 但一般将最多使用主要的步骤事件。比如:在星际大战游戏中,设置每N秒出现一个怪物,每M秒出现另一个怪物
- 碰撞事件:两个或多个Object实例发生碰撞时发生。比如:在星际大战游戏中,子弹Object和怪物Object碰撞,两个Object都销毁
- 抽奖活动:…
- 销毁事件:是实例被摧毁后最后执行的事件。比如:当敌人被杀死时,制作爆炸效果、加分等等
其他游戏属性
- 游戏中的坐标系-示例
图例为:room的长为960px, 宽为800px时
- 游戏中的角度
- 游戏帧数:
每秒60帧。每过1秒,游戏会运行60次loop,每一步(循环/帧)都会发生一些事件,游戏就会有进展
游戏中设置倒计时填写60代表1s
最佳实践
- 编码风格:
- 命名规范
- 代码注释
- 代码分割
- 使用本地变量,增加代码可读性、提高代码效率
- 数组:在初始化数组时,定义好数组的长度 ```javascript // array_create(array_length, default_value) var array = array_create(100, 0);
// 兼容性问题 if (os_browser == browser_not_a_browser) { array_create(100, 0); } else { for (var i = 0; i < 100; ++i;) { array[i] = 0; } }
// 释放数组内存 array = 0
4. 碰撞
检查碰撞的函数:collision_, point_, place_, instance_<br />处理速度:collision/point_ > place_ > instance_<br />基于瓦片的碰撞系统 [https://www.youtube.com/watch?v=UyKdQQ3UR_0&feature=youtu.be](https://www.youtube.com/watch?v=UyKdQQ3UR_0&feature=youtu.be)
5. 可以提高性能的函数
谨慎地使用函数 [gpu_set_blendenable()](https://manual-zh.yoyogames.com/GameMaker_Language/GML_Reference/Drawing/GPU_Control/gpu_set_blendenable.htm), [gpu_set_alphatestref()](https://manual-zh.yoyogames.com/GameMaker_Language/GML_Reference/Drawing/GPU_Control/gpu_set_alphatestref.htm),和 [gpu_set_alphatestenable()](https://manual-zh.yoyogames.com/GameMaker_Language/GML_Reference/Drawing/GPU_Control/gpu_set_alphatestenable.htm)可以极大地提高性能,并且可以在你的项目代码中根据需要启用/禁用,可能不适合所有类型的图形或项目。
```javascript
// 控制半透明元素的开启和关闭
gpu_set_blendenable(true);
gpu_set_blendenable(false);
- 不要害怕使用三角函数,因为(与流行的看法相反)它们是相当快的,特别是与粒子、碰撞、strings ,等等相比。
- 不要把不是用来画东西的代码放在Draw事件中。
- 使用一个报警器来调用任何不必每一步都调用的代码(而不是直接将其添加到步骤事件中)