如果只有这些子弹,那看起来必然是很一般的,想想看,只有几颗子弹,孤零零的从下面跑到上面。。。。。
GameBarrage弹幕类,用于创建一些酷炫叼的弹幕~~其实核心也就是通过一些数学公式,然后批量AddBullet而已~~
先来看看类型的定义
public enum BarrageType
{
Line,
RotateAndShoot,
CrossLine,
Circle
}
初步就这四种,其余的弹幕类型都可以通过这几种组合出来
然后就是弹幕的具体实现
public class GameBarrage
{
private GameScene mScene;
public GameBarrage(GameScene scene)
{
this.mScene = scene;
}
/// <summary>
/// 圆形弹幕
/// </summary>
/// <param name="isOwn">是否为玩家子弹</param>
/// <param name="type">子弹类型</param>
/// <param name="color">子弹颜色</param>
/// <param name="position">中心点位置</param>
/// <param name="speed">子弹移动速度</param>
/// <param name="accel">子弹移动加速度</param>
/// <param name="interval">每颗子弹的角度间隔</param>
/// <param name="delay">延迟发射时间</param>
public void CreateCircle(bool isOwn, int type, int color, Vector2 position, float speed, float accel, int interval, float delay)
{
int angle = 0;
while (angle < 360)
{
mScene.AddBullet(new GameBullet(isOwn, position, Helper.GetSpeedWithAngle(angle, speed), Helper.GetSpeedWithAngle(angle, accel), type, color, delay));
angle += interval;
}
}
/// <summary>
/// 扇形弹幕
/// </summary>
/// <param name="isOwn">是否为玩家子弹</param>
/// <param name="type">子弹类型</param>
/// <param name="color">子弹颜色</param>
/// <param name="position">中心点的位置</param>
/// <param name="startAngle">扇形的起始角度(向右为0°)</param>
/// <param name="endAngle">扇形的结束角度(顺时针)</param>
/// <param name="speed">子弹移动速度</param>
/// <param name="accel">子弹移动加速度</param>
/// <param name="interval">每颗子弹的角度间隔</param>
/// <param name="duration">发射持续时间(为0表示瞬间发射所有)</param>
/// <param name="delay">延迟发射时间</param>
public void CreateRotateAndShoot(bool isOwn, int type, int color, Vector2 position, int startAngle, int endAngle, float speed, float accel, int interval, float duration, float delay)
{
int count = startAngle;
int angle = Math.Abs(endAngle - startAngle);
float wait = duration / (float)angle;
if ( endAngle > startAngle )
{
while (count < endAngle)
{