0

Ogre を使用して最初の 3D ゲームを作成しようとして、一般的な「オブジェクト」クラスを書き始めました。コンストラクター:

Object( const char* mesh, Ogre::SceneManager*& sm )
{
    ...
    _sn = sm->getRootSceneNode()->createChildSceneNode( _sn_name );
    _ent = sm->createEntity( _ent_name, mesh );
    _sn->attachObject(_ent);
    ...            
}

_sn は SceneNode* であり、_ent は Entity* です (両方とも非公開)。問題は、画面に何も描画されないことです! しかし、私が使用する場合:

Ogre::Entity *map = mSceneMgr->createEntity("map","map.mesh");
Ogre::SceneNode *sc = mSceneMgr->getRootSceneNode()->createChildSceneNode("mapNode");
sc->attachObject(map);

クラスの外では、オブジェクトが描画され、すべてが機能します。

私のアプローチの何が問題で、どうすれば修正できますか?

4

2 に答える 2

1

私は解決策を持っています: 私はそれの前に同じ経験を持っています, あなたはチェックする必要があります:

  1. 作成されたインスタンスの数は?

  2. ここにコンストラクターはいくつありますか?

  3. この言葉を使いますか?クラスが継承された場合、親メソッドと属性の適用に注意してください。これらはコンストラクターに依存しており、null ポインターを返す可能性があるためです。

  4. 継承を使用する場合は、親 obj を継承されたクラスに渡すことをお勧めします。

于 2012-08-12T18:34:33.853 に答える
0

これを修正することができました。私のデストラクタでは、シーン マネージャに detachAllObjects() を呼び出してもらいました。問題を明らかに解決したコメント/削除

于 2012-08-12T19:42:59.060 に答える