第 2 部分 – 环形弹注意:本篇教程的侧重点在于实现子弹的样式,因此对 boss 的准备过程(移动 boss,
@Initialize 中的相关的函数等)的说明一带而过。如果需要更多这方面的信息,请参照有关的 boss 教程或函数表。
东方系列和大多数其它飞行射击游戏中的子弹样式依赖若干个基础块构建出这些符卡。几乎每一套弹幕攻击都可以分解成旋转弹,环形弹,交叉弹,自机狙等等。这里我们将要学习最简单的一种,环形弹。
环形弹是 boss 一次性发射出的非常简单的一圈子弹,这一圈子弹通常情况下是均匀分布的。弹幕风有众多方法实现这个效果。
方法 1a:let a = 0;
loop(24)
{
CreateShot01(GetX, GetY, 3, a, RED01, 0);
a += 15;
}
这种方法是最简单的,也是非常灵活的。这段程序总共创建了 24 颗子弹,每颗子弹在创建时以当前 a 的值为角度发射出去。子弹的角度从 0 开始,以 15 度间隔依次发射,使得子弹的发射角度分别为 0,15,30,45,60,75,90,105,120,135,依此类推。这种方法需要手动键入相邻子弹之间角度的间隔。如果在这里用 14 代替 15 则不会产生一个完美的环形,因为最后一颗子弹的角度将是 336 而不是 345(345 度的子弹与第一颗子弹的角度间隔正好是 15 度)。您可以通过再增加一个变量避免这种情况:
方法 1b:let a = 0;
let num = 24; // 修改这个数字指定环形弹的子弹数目。
loop(num)
{
CreateShot01(GetX, GetY, 3, a, RED01, 0);
a += 360/num;
}
在这个例子中,num 指示出环形弹的子弹数。循环体会根据传入的 num 值自动计算出正确的角度。
以上这两种方法仍然存在另一个问题,即每次发出的子弹是固定弹。如果想让子弹对准玩家或随机发射,只要在 direction 参数的末尾加上 +GetAngleToPlayer 或 +rand(0, 360) 即可:
方法 1c:let a = 0;
let num = 24; // 修改这个数字指定环形弹的子弹数目。
loop(num)
{
CreateShot01(GetX, GetY, 3, a+GetAngleToPlayer, RED01, 0);
a += 360/num;
}
(完)