本人在编译wiki Tutorial 的框架程序的时候遇到这个问题。仔细一查,是在用到overlay的时候没有事先声明。我很奇怪,为什么教程上要这样写呢。原来是我的版本OGRE1.9中,overlay组件从核心变成了插件形式,该组件在之前版本是作为核心存在的,每次程序开始的时候,Root中已经声明了一个实例,每次调用只需要getsingleton()即可。但是1.9版本中却不行,每次要在开始的时候声明:在chooseSceneManager()中插入,如:
void BaseApplication::chooseSceneManager(void)
{
// Get the SceneManager, in this case a generic one
mSceneMgr = mRoot->createSceneManager(Ogre::ST_GENERIC);
mOverlaySystem = new Ogre::OverlaySystem();
mSceneMgr->addRenderQueueListener(mOverlaySystem);
}
在最后的时候,按顺序删除。
if (mTrayMgr) delete mTrayMgr;
if (mOverlaySystem) delete mOverlaySystem;
if (mCameraMan) delete mCameraMan;
还有,在1.9中mouse和keyboard整合在mInputContext中。需注意。