基于C#弹幕类射击游戏的实现——(七)弹幕类实现

本文介绍了如何使用C#实现弹幕类射击游戏,重点讲解了圆形和扇形弹幕的实现。通过数学公式计算不同角度的坐标和速度,结合延迟显示,创造出动态的弹幕效果。这一技术可用于BOSS弹幕的生成,为游戏增加视觉冲击力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果只有这些子弹,那看起来必然是很一般的,想想看,只有几颗子弹,孤零零的从下面跑到上面。。。。。

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)
	            {
	            	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值