2016-11-08 68 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);