我正在尝试做一个简单的用户界面上有一些文字。我可以创建一个空的面板并显示,但是当我尝试创建一个TextAreaOverlayElement时会出现运行时错误。
错误: OGRE EXCEPTIONS<5:ItemIdentityException>:在..........\Components\Overlay\src\OgreOverlayManager.cpp的OverlayManager::createOverlayElement中找不到元素类型TextView的工厂
这是我创建的代码:
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();如果有人知道是什么原因导致这种情况或解决办法,我将非常感谢!我一直在用头撞桌子,试图弄清楚这件事!
发布于 2017-01-03 17:28:04
错误说明它找不到像"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"));此外,您还错过了将text添加到panel中。打电话
panel->addChild(text);https://stackoverflow.com/questions/40493765
复制相似问题