大约在一年以前,我写了一篇 Unity3D 的入坑笔记。而现在,是时候尝试点新东西了,所以就有了这篇文章。
严格来说,在这里我只是记录下自己学习 GMS 的进度。
教程资源
教程参考的是 https://indienova.com/indie-game-development/gms-2-tutorial-for-starters/ ,即使用 GMS 内置的教程体系。
学习计划
先把教程的内容过一遍。如果是和 Unity 相似的内容,就不再赘述了;如果是与之前不一样的地方,会额外地列出来,写在这里。
最新动态
项目0:GMS操作说明
GMS的一大特点是,窗口都是可以浮动的,并且可以随意地进行重排。这是官网的话,其实我觉得还算好,不过能把一个部件单独拉成一个窗口,的确是很带感,双屏做起来会很爽。
Ctrl + T 可以快速在窗口间切换。
项目1:Drag and Drop
DND 是 GMS 中另一个有特色的地方,通过拖拽预定义的组件就可以进行编程,而不用写代码。
要列举这类使用拖拽来编程的例子,就不得不提 Scratch 了,这是一款由麻省理工学院(MIT) 设计开发的少儿编程工具。其特点是:使用者可以不认识英文单词,也可以不会使用键盘。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动模块到程序编辑栏就可以了。
在游戏领域,Unreal中的蓝图、RPG Maker中的拖拽,也都属于此类。
----
附录:游戏教学视频playlist:https://www.youtube.com/playlist?list=PLhIbBGhnxj5IF9saL3KNqeJqHKGHHeLFh
教程文本的html版:文件系统中搜索"com.YoYoGames.MyFirstGameDD"即可找到,或者搜索"Icon_DnD_RoomGoto"试试看。(我只是觉得ui的字太小了,看着累)
----
进度:Chapter 1-8 耗时: 5.5 hours
Q:如何移动角色?
A:在该角色的Step函数中控制。
Q:如何增加碰撞脚本?
A:在该obj的事件中选择Collision,选择要碰撞的对象。在Events中使用ApplyTo,缩小作用域到Self(碰撞体)或者Other(被碰撞体)。
Q:ApplyTo 应该如何使用?
A:在需要指定是某类的某个实例时(例如子弹碰到了敌人,敌人掉血,那肯定是希望这个敌人掉血,而不是所有敌人的时候),或者在某类脚本里访问其他对象的时候(比如敌人死亡,分数增加,这个分数是外在的对象的变量,就需要ApplyTo,否则可能会报错误
Variable obj_xx.var_yy not set before reading it)。
Q:如何设置背景格?
A:新建TileSet。制作一个TileMap,需要注意的是,左上角的那一个需要留空,用于引擎画默认贴图。(即使不留空,也不会画任何东西,所以还不如留空)
Q:关于绘制事件?
A:所有的 Draw Action 必须放在Draw Event中才会生效。
Q:如何获取摄像机位置?
A:定义临时变量 vc 为 view_camera[0],使用 camera_get_view_x(vc) 即可。
Q:如何修改一个sprite的透明度?
A:使用内置变量 image_alpha 或者使用 Instance 下的 Set Instance Alpha 命令。
Q:如何检测键盘事件?
A:两种办法:1) 在 Step 事件中拖入 Key 事件,2) 在 Add Event 中就可以选取指定的键盘/鼠标事件。
Q:如何在生成物体前制作动画?
A:可以使用不带事件的对象A,然后在动画结束后使用 Change Instance 命令,将它变成另一个对象B。如果这两个对象形状完全相同,玩家就不会觉察到实例已经发生了改变。消失动画同理,将它变成一个播放结束动画的物体即可。
Q:如何创造定时效果/技能冷却效果?
A:使用内置的 Set Alarm Countdown 来设定需要计数的帧数,当它等于0时会触发(仅一次),或者使用内置变量 alarm[i] 来访问它(小于等于0表示计时已经结束)。
Q:如何制作结局动画?
A:创建一个新的room,然后在player死亡时使用 Next Room 跳转过去。
Q:如何制作一个highscore feature并且保存最佳分数并显示给玩家?
A:大概是使用全局变量吧,我猜。
Q:如何让Enemy向玩家射击?
A:定时生成子弹对象,在子弹的 Create 方法里,获取玩家坐标,并使用Set Point Direction(内置变量direction),增加速度,Set Instance Rotation 即可。
暂无关于此日志的评论。