次のコードに問題があります。オーバーライドされた仮想関数が実行されていません。ここで間違っているかどうかはわかりませんが、おそらくばかげた間違いです。とにかく、これはゲーム プロジェクトであり、私はこのようなオブジェクトの配列を持っています (core::array はベクトル配列に似た irrlicht 配列です)
core::array<GameObject> gameTargets;
これはGameObject
とのZombie
定義です
class GameObject {
protected:
scene::ISceneNode* node;
public:
int ID;
int hitpoints;
GameObject() {
...
};
void setNode(scene::ISceneNode* inode) {
...
}
virtual void shot(int dmg) {
... [BREAKPOINT HERE]
}
scene::ISceneNode* getNode() {
return node;
}
};
class Zombie : public GameObject {
public:
static const enum Animation {
ZOMBIE_WALK,
ZOMBIE_HURT,
ZOMBIE_DIE,
ZOMBIE_TWITCH,
ZOMBIE_ATTACK,
ZOMBIE_IDLE
};
//We only want to accepted animated mesh nodes for this object
Zombie(int hp, scene::IAnimatedMeshSceneNode* inode) {
...
}
//Override the shot function
void shot(int dmg) {
... [BREAKPOINT HERE]
}
//Animate the zombie
void setAnimation(Animation anim) {
...
}
};
派生クラスのメンバー関数が呼び出されることはありません。このようなオブジェクトを作成しています
Zombie target(hp, (scene::IAnimatedMeshSceneNode*)node);
そして、このように仮想関数を呼び出します
for(int i = 0; (u32)i<level->gameTargets.size(); i++) {
if(selectedNode == level->gameTargets[i].getNode()) {
level->gameTargets[i].shot(b->damage);
}
}
ここで、b は int 変数のダメージを持つ弾丸へのポインターであり、gameTargets には GameObject が含まれます