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); }
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; } } }