2012-08-12 79 views
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是一個場景結點*和_ent實體*(私營)。 問題是沒有任何東西會被吸引到屏幕上! 但是,如果使用:

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

外的一類,對象被拉伸,一切正常。

我的方法出了什麼問題,我該如何解決?

+0

爲什麼你使用指針參考作爲參數?有什麼特別的理由這麼做? – 2012-08-12 18:37:27

+0

爲了避免不必要的複製(?)。使用簡單的指針/參考進行嘗試,不起作用。 – user1233963 2012-08-12 18:47:25

+0

所以你做得很差/錯。任一選項都可以避免複製,您當然不需要兩者都可以。 – 2012-08-12 18:48:45

回答

0

設法解決這個問題。 在我的析構函數中,我有場景管理器調用detachAllObjects()。評論/刪除,明顯解決了這個問題

1

我有一個解決辦法:我收到同樣的經歷,你應該檢查:

  1. 多少實例創建?

  2. 這裏有多少個構造函數?

  3. 你使用這個詞?如果你的類繼承,小心應用父方法和屬性,因爲它們依賴於它們的構造函數並可能返回空指針。

  4. 如果您使用繼承,我更願意將父對象傳遞給繼承類。

+0

只有1個實例,1個構造函數,沒有繼承 – user1233963 2012-08-12 18:46:40

+0

所以請謹慎在線程中分配內存。 – PersianGulf 2012-08-12 18:48:32