在类中封装游戏对象

时间:2012-08-12 18:17:59

标签: c++ ogre

在我尝试使用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);

在一个类之外,该对象被绘制,一切正常。

我的方法有什么问题,如何解决?

2 个答案:

答案 0 :(得分:1)

我有一个解决方案:我之前有相同的经验,你应该检查:

  1. 创建了多少个实例?

  2. 这里有多少个构造函数?

  3. 你用这个词吗?如果您的类继承,请小心应用父方法和属性,因为它们依赖于它们的构造函数,并且可能返回空指针。

  4. 如果您使用继承,我更倾向于将父obj传递给继承的类。

答案 1 :(得分:0)

管理来解决这个问题。 在我的析构函数中,我让场景管理器调用detachAllObjects()。评论/删除显然解决了这个问题