在ogre下使用cegui出现的Expression::ms_Singleton

时间:2021-03-19 03:38:56
请问为什么我的程序在任意一句使用单件的语句,如CEGUI::SchemeManager::getSingleton().create("TaharezLook.scheme"); 都会崩溃。
Assertion failed!
Expression::ms_Singleton
我的ogre里的单件对象到是建立了,mRoot之类的都有了。
代码是网上找的:

class TutorialApplication:public ExampleApplication
{
public:
    CEGUI::OgreRenderer* mGUIRenderer;
    CEGUI::Window* mEditorGuiSheet;
CEGUI::System* mGUISystem;

public:
    TutorialApplication()
        :mGUIRenderer(NULL),mEditorGuiSheet(NULL)
    {
    }

    ~TutorialApplication()
    {
        /**//*if(mEditorGuiSheet)
        {
            CEGUI::WindowManager::getSingleton().destroyWindow(mEditorGuiSheet);
        }*/
    }

protected:
    void createScene(void)
    {
//CEGUI::WindowManager& winmgr = CEGUI::WindowManager::getSingleton(); 

CEGUI::SchemeManager::getSingleton().create("TaharezLook.scheme");    
CEGUI::System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow");    
CEGUI::FontManager::getSingleton().create("DejaVuSans-10.font");    
// 在此载入layout文件    
// 这个就是要在实际当中经常使用的    
CEGUI::Window* sheet =  CEGUI::WindowManager::getSingleton().loadWindowLayout("MyUI.layout");    
CEGUI::System::getSingleton().setGUISheet(sheet);  

      
Ogre::Entity* ogreHead = mSceneMgr->createEntity("Head", "ogrehead.mesh");

Ogre::SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
headNode->attachObject(ogreHead);

// Set ambient light
mSceneMgr->setAmbientLight(Ogre::ColourValue(0.5, 0.5, 0.5));

// Create a light
Ogre::Light* l = mSceneMgr->createLight("MainLight");
l->setPosition(20,80,50);


        //mSceneMgr->setAmbientLight(ColourValue(1, 1, 1));
        //mSceneMgr->setSkyDome(true, "Examples/CloudySky", 5, 8);
    }

谢谢指教!

6 个解决方案

#1


ogre的代码是开源的。

关于这个问题我觉得你应该自己跟踪下哪里有问题,毕竟你能见到所有源代码。

(ps: C++这种语法真让人看着头疼啊……)

#2


自己耐心好好看看吧

#3


提问的时候很明显已经调试,跟踪过了,问题是出在那句
CEGUI::SchemeManager::getSingleton().create("TaharezLook.scheme"); 上,当获取单件的对象时,assert就报错。   

#4


检测下资源粗存在不?
看这个单例初始化了吗?

#5


该回复于2010-09-29 13:06:55被版主删除

#6


我想你是升级了CEGUI到新版本了吧。那个断言是说SchemeManager的mSingleton指针没有被赋过值(这时候如果访问别的CEGUI的Singleton也会这样的)。估计是升级后单件的实现不太一样了。
简单地说,估计现在你需要给CEGUI系统初始化一下再用它:就是先调用一下CEGUI::System::create。
看看可不可以。

#1


ogre的代码是开源的。

关于这个问题我觉得你应该自己跟踪下哪里有问题,毕竟你能见到所有源代码。

(ps: C++这种语法真让人看着头疼啊……)

#2


自己耐心好好看看吧

#3


提问的时候很明显已经调试,跟踪过了,问题是出在那句
CEGUI::SchemeManager::getSingleton().create("TaharezLook.scheme"); 上,当获取单件的对象时,assert就报错。   

#4


检测下资源粗存在不?
看这个单例初始化了吗?

#5


该回复于2010-09-29 13:06:55被版主删除

#6


我想你是升级了CEGUI到新版本了吧。那个断言是说SchemeManager的mSingleton指针没有被赋过值(这时候如果访问别的CEGUI的Singleton也会这样的)。估计是升级后单件的实现不太一样了。
简单地说,估计现在你需要给CEGUI系统初始化一下再用它:就是先调用一下CEGUI::System::create。
看看可不可以。