我有超类子弹的EnemyBullet子类。
现在,我使用EnemyBullet对象调用Bullet方法Process()。
我想要确定当前对象是否是EnemyBullet,以区别于Bullet动作。
我的代码是这样的,

void Bullet::Process(float deltaTime)
{
// Generic position update, based upon velocity (and time).
m_y = m_y + this->GetVerticalVelocity()*deltaTime;
m_pSprite->SetY(static_cast<int>(m_y));
m_pSprite->SetX(static_cast<int>(m_x));

  if (m_y < 0)
  {
    SetDead(true);
  }

//Here I want to detect current object is an EnemyBullet, then define a different action
//I tried the following code, but it didn't work
if (EnemyBullet* v = static_cast<EnemyBullet*>(Bullet)) {
     if (m_y >800)
    {
      SetDead(true);
    }
 }
}

最佳答案

这是从超类中的方法调用子类的实例上的方法的示例:

class Bullet {
public:
  void process() {
    // update m_y...

    // update sprite position...

    if (this->isDead()) {
      // handle dead bullet...
    }
  }

  virtual bool isDead() {
    return (m_y < 0);
  }

protected:
  int m_y;
};

class EnemyBullet : public Bullet {
public:
  bool isDead() override {
    return (m_y > 800);
  }
};


注意每种项目符号类型如何具有自定义的isDead逻辑。

09-07 06:16