Exemple #1
0
    private BulletBase NewBullet(BulletType bulletID)
    {
        BulletBase         bullet = null;
        Stack <BulletBase> _stack;

        // 判断对象池中是否有该类型的对象,如果有,则取出
        if (_bulletsPool.TryGetValue(bulletID, out _stack))
        {
            if (_stack.Count > 0)
            {
                bullet = _stack.Pop();
            }
        }
        else
        {
            _stack = new Stack <BulletBase>();
            _bulletsPool.Add(bulletID, _stack);
        }
        // 如果对象池内没有该对象,则创建
        if (bullet == null)
        {
            switch (bulletID)
            {
            case BulletType.ReimuA_Sub1:
                bullet = new BulletReimuASub1();
                break;

            case BulletType.Player_Laser:
                bullet = new PlayerLaser();
                break;

            case BulletType.Player_Simple:
                bullet = new PlayerBulletSimple();
                break;

            case BulletType.Enemy_Laser:
                bullet = new EnemyLaser();
                break;

            case BulletType.Enemy_CurveLaser:
                bullet = new EnemyCurveLaser();
                break;

            case BulletType.Enemy_Simple:
                bullet = new EnemySimpleBullet();
                break;

            case BulletType.Enemy_LinearLaser:
                bullet = new EnemyLinearLaser();
                break;

            default:
                Logger.Log("Create Bullet Fail! Invalid BulledId!");
                break;
            }
        }
        return(bullet);
    }
Exemple #2
0
 protected void Shoot()
 {
     // 更新CD
     if (_curShootCD > 0)
     {
         _curShootCD--;
     }
     if (_character.CanShoot() && _character.IsInShootingStatus())
     {
         if (_curShootCD == 0)
         {
             float posX, posY;
             _character.GetPosition(out posX, out posY);
             BulletReimuASub1 bullet = ObjectsPool.GetInstance().CreateBullet(BulletType.ReimuA_Sub1) as BulletReimuASub1;
             bullet.ChangeStyleById("501000");
             bullet.SetPosition(posX + _subWeapon.transform.localPosition.x, posY + _subWeapon.transform.localPosition.y);
             bullet.DoMove(8, GetShootBulletAngle());
             _curShootCD = ShootCD;
         }
     }
 }