在我尝试使用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一个实体*(都是私有的)。 问题是没有任何东西被吸引到屏幕上! 但如果我使用:
Ogre::Entity *map = mSceneMgr->createEntity("map","map.mesh");
Ogre::SceneNode *sc = mSceneMgr->getRootSceneNode()->createChildSceneNode("mapNode");
sc->attachObject(map);
在一个类之外,该对象被绘制,一切正常。
我的方法有什么问题,如何解决?
答案 0 :(得分:1)
我有一个解决方案:我之前有相同的经验,你应该检查:
创建了多少个实例?
这里有多少个构造函数?
你用这个词吗?如果您的类继承,请小心应用父方法和属性,因为它们依赖于它们的构造函数,并且可能返回空指针。
如果您使用继承,我更倾向于将父obj传递给继承的类。
答案 1 :(得分:0)
管理来解决这个问题。 在我的析构函数中,我让场景管理器调用detachAllObjects()。评论/删除显然解决了这个问题