2016-11-08 73 views
1

我想製作一個簡單的用戶界面,其上有一些文本。我可以創建一個空面板並顯示它,但是當我嘗試創建TextAreaOverlayElement時存在運行時錯誤。食人魔:創建簡單文本的問題用戶界面

錯誤:OGRE EXCEPTIONS < 5:ItemIdentityException>:在..........無法找到工廠在OverlayManager元素類型的TextView :: createOverlayElement \組件\疊加\ SRC \ OgreOverlayManager.cpp

這是我所創建的代碼:

Ogre::OverlaySystem* pOverlaySystem = new Ogre::OverlaySystem(); 
ogre_root_->getSceneManager("MySceneManager")->addRenderQueueListener(pOverlaySystem); 

std::cout << "Into ui init" << std::endl; 
Ogre::OverlayManager& overlayManager = Ogre::OverlayManager::getSingleton(); 
std::cout << "Got singleton" << std::endl; 

    // Create an overlay 
    Ogre::Overlay* overlay = overlayManager.create("OverlayName"); 

    // Create a panel 
    Ogre::OverlayContainer* panel = static_cast<Ogre::OverlayContainer*>(overlayManager.createOverlayElement("Panel", "PanelName")); 
    panel->setPosition(0.5, 0.5); 
    panel->setDimensions(0.1, 0.1); 
    panel->setMaterialName("BaseWhite"); 
    // Add the panel to the overlay 
    //Breaks on next line 
    Ogre::TextAreaOverlayElement* text = (Ogre::TextAreaOverlayElement*)((Ogre::OverlayContainer*)overlayManager.createOverlayElement("TextView", "TextArea")); 

    overlay->add2D(panel); 

    // Show the overlay 
    overlay->show(); 

如果有誰知道什麼可能導致這或替代方法我真的很感激了!我一直盯着桌子,試圖找出這個問題!

回答

0

該錯誤表示無法找到像「TextView」這樣的疊加元素工廠。

這是絕對真實的(除非你定義一個)

createOverlayElement簽名如下(See reference manual of 1.9):

OverlayElement* Ogre::OverlayManager::createOverlayElement(
    const String& typeName, 
    const String &instanceName, 
    bool isTemplate = false 
) 

因此,你應該在定義疊加元素第一名和第二名。

嘗試爲你的情況如下:

Ogre::TextAreaOverlayElement* text = 
    static_cast<Ogre::TextAreaOverlayElement*>(
    overlayManager.createOverlayElement("TextArea", "TextView")); 

而且,你錯過添加textpanel。致電

panel->addChild(text);