GMS2 学习笔记(二)

前言

跟着Heart Beasts的横版射击游戏制作教程走到了第五章,渐渐发现脑子有点跟不上啊,事件太多,套路(方法的使用方式)太多,文科生伤不起。

这次的学习笔记试着换个思路来写,第一篇有点太偏向于基于官方文档对方法的解读,而没有结合实例,而本身学了一段下来发现难点不在于对方法的记忆,而是对方法的活学活用及灵活的表达式编写,所以这篇会试着从实践的角度来对一些学习中遇到的问题进行记录。


自建脚本的创建和使用

自建脚本的就是:将可以多次复用的代码写到脚本中,以方便后期的复用。

教程中多次使用到place_meeting这个碰撞检测方法,所以将其编写成名为“move”的脚本,如下:

GMS2 学习笔记(二)_第1张图片
这段代码表示检测X Y方向下一次运动是否会与对象发生碰撞

但是这里有一点到现在还没弄明白,脚本中的检测对象始终是o_solid对象(墙体对象),但是教程有将这个脚本运用到敌人与敌人的碰撞检测中,这里记录下,希望后续能够弄明白这一点。


状态机(event_user方法)

就是可以赋予一个对象多个状态的机制(自己解读LOL),用好状态机,可以让自己的代码在后期回溯修改或者debug的时候更方便,换句话来说就是加强代码的可读性。比如在最开始我们在step事件里面需要去写对象的移动、对象的攻击、对象被击中的状态等,但是用状态机,就可以将不同事件的代码分配到不同的状态机当中,这样在step事件中只要去调用不同的状态即可。

GMS2 学习笔记(二)_第2张图片
1、通过在create事件中通过语义化的变量名称来代表状态机的参数,定义默认的状态为MOVEMENT


GMS2 学习笔记(二)_第3张图片
2、在step事件中只保留了一行代码,就是event_user方法,由于state_变量可变,因此状态也得以变化


GMS2 学习笔记(二)_第4张图片
3、要记住在不同的状态后加上状态切换的判断条件,不然状态机就不会循环了~


灵活运用方法

教程中有个地方是要判断一个对象速度减弱到无限趋近于0的时候,就会切换状态机状态,正常可以在hspeed_push和vspeed_push的值等于0或者<1的时候的条件判断去做状态切换这里Heart Beasts用了一个我觉得很聪明或者说取巧的方法(膜拜大神)来做到判断。

GMS2 学习笔记(二)_第5张图片
代码是这样的:

point_distance方法本来是用来返回两点间距离的,前两个参数是A点的x,y坐标,后两个参数是B点的x,y坐标,这里就很聪明的让A点是0,0,而B点的参数是对象在x,y方向上的速度,通过这种方式来返回速度当前速度,真的是绝妙。。。



以上是本次的笔记,感触最深的是第三点,这就是在前言说的套路吧,同样的方法可以有许多实用方式,关键在于你能得到想要的变量和判断结果。

你可能感兴趣的:(GMS2 学习笔记(二))