Ogre:创建简单文本的问题ui

时间:2016-11-08 18:13:59

标签: user-interface ogre ogre3d

我正在尝试制作一个简单的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();

如果有人知道可能导致这种情况或解决方法的原因,我将非常感激!我一直在敲桌子试图弄清楚这一个!

1 个答案:

答案 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}}