我正在尝试制作一个简单的ui,上面有一些文字。我可以创建一个空面板并显示,但是当我尝试创建TextAreaOverlayElement时会出现运行时错误。
错误:OGRE EXCEPTIONS< 5:ItemIdentityException>:无法找到OverlayManager :: createOverlayElement中元素类型TextView的工厂.......... \ Components \ Overlay \ 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 :(得分:0)
错误说它找不到像“TextView”这样的覆盖元素工厂。
绝对正确(除非你定义一个)
OverlayElement* Ogre::OverlayManager::createOverlayElement(
const String& typeName,
const String &instanceName,
bool isTemplate = false
)
的签名如下(See reference manual of 1.9):
Ogre::TextAreaOverlayElement* text =
static_cast<Ogre::TextAreaOverlayElement*>(
overlayManager.createOverlayElement("TextArea", "TextView"));
因此,您应该首先定义覆盖元素类型,然后将您选择的名称定义为第二个。
根据您的情况尝试以下方法:
text
此外,您错过了将panel
添加到panel->addChild(text);
。呼叫
{{1}}