2012-08-12 52 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