@VeewoGames 原本以为观察过弹幕游戏并且对引擎有一定程度了解的话那些应该不难做出……好吧那就分解说明一下:
自机狙是弹幕游戏里很常见的一个类型,发射时瞄准玩家,一旦发射后就沿直线行进直到命中、被消弹或者超出范围,以上是“狭义”自机狙。最简单模型是由BOSS直接发射,所以但看这一发的话,起始位置确定(BOSS位置),角度确定(BOSS-玩家的直线),可定义的是“速度大小”这一个参数。
用GM制作的话,甚至这个object只带有一个“离开房间”事件。嗯,创建时要开始瞄准玩家开始移动这些事并不做到这个敌弹上,而是做到“发射器”上。
广义一些来说,发射的可以不是“一发”而是按角度均匀分布的“一组”,而这组的中心瞄准玩家。根据这个组里包含的单发数量,一般在弹幕类型里被称为“奇数弹”和“偶数弹”。写程序的时候可能只是一个数值的差别,但对于游戏性来说,奇数弹中心的那一发和狭义自机狙是一样的,原地不动必然会被打到,而对于偶数弹来说自机狙的那部分是正中间的“空隙”。无论“奇数弹”还是“偶数弹”,当这一组都是直线轨迹且速度大小一样时,弹幕都会呈现圆弧状排列,逐渐扩散出去。比起单发的狭义自机狙来说,会多出两个参数,一个是这组里包含的单发“数量”,一个是每两个单发之间的“角度差”。用GM来制作的话呢,可以做一个“发射器”的object。用for循环来处理这一整组的发射。如果没接触过利用id精确操作其他实力、利用返回值获取数据之类的内容的话,可以大概参考一下下面这串代码:
for(i=0;i<15;i=i+1{
t=inatance_create......
t.speed=.....
t.direction=i*4+......
}
发射完成后可以直接销毁发射器,或者说全部的发射代码和销毁代码都堆在了创建事件里。
广义自机狙比起单发来说确实要好看一些,但用数量和角度差能做出的效果依然有限,最多也就是铺满一个整圆。在整个弹幕结构里引入发射的“时间差”这个概念以后,弹幕会更有层次感。比如,原定的一组广义弹改成10组,每隔5个step发射一次。即使是完全重复的弹幕,在玩家看来也会不同,毕竟不能像单组那样钻进圆环里就万事大吉。这种连射弹幕,比起广义自机狙又多了两个参数,“准备发射几组”,以及“发射间隔”。
如果想让弹幕更有感觉的话,那么连射的这几组广义自机狙之间可以考虑做点区别。每次发射以后,广义自机狙的“角度差”参数就稍微增大/减小一点。或者每次发射后,飞行速度都比上一组稍高一点,来让新发射的“追赶”已经发射的。
用GM来制作的话呢,首先由于“间隔”的存在,意味着在上边的代码外再套一层for肯定不能满足需要(那样会导致“同时”发射)。要使用计时器alarm,或者在step里自定义的值来保证这段代码“在几个step之后”再次执行。具体细节不再赘述,因为我已知的自带教程里都有alarm的教学,如果看了那些都不能融汇贯通到这里使用的话,请选择……A、用了不适当的教程;B、没有进行足够的理解;C、只是看了看以为懂了但其实动手能力不足;D、承认自己“构建”的能力根本不够。
上边那些动图的工程里一共用了3个object:
1、主控object,用于记录各种变量、响应用户操作。在点击鼠标左键时会创建“发射器”;
2、发射器,创建时会接受主控传来的各种参数,然后开始执行发射动作,在波次达到要求后销毁自己;
3、单发弹,只是离开屏幕后销毁,初始移动是由发射器直接给的。