Ogre 14.1中Trays库按钮事件无响应及资源加载异常问题
Ogre 14.1开发中按钮点击事件不触发及资源加载异常问题
我在Windows环境下使用Ogre 14.1开发项目,需要实现可点击按钮,已按照官方文档开发,但遇到以下问题:
初始问题:按钮点击事件未触发
程序无报错,但buttonHit()函数始终不执行,点击按钮没有任何反应。
应用代码:
class MyApplication : public ApplicationContext, public InputListener { public: ShaderGenerator* shadergen = nullptr; MyTrayListener mlistener; //see next code SceneManager* scnMgr = nullptr; SceneNode* LightNode = nullptr; SceneNode* CameraNode = nullptr; Viewport* viewport = nullptr; void run() { // Main loop playing = true; while (playing) { getRoot()->renderOneFrame(); } } void setup() override { ApplicationContext::setup(); Root* root = getRoot(); // Get the scene manager scnMgr = root->createSceneManager(); // Register the input listeners addInputListener(this); // Create and set up the scene createScene(); //adding lights, cameras, etc addModels(); //added some models scnMgr->addRenderQueueListener(getOverlaySystem()); } void loadResources() override { addUI(); // ADDED TRAY BUTTONS } bool frameRenderingQueued(const Ogre::FrameEvent& evt) override { mTrayMgr->frameRendered(evt); return ApplicationContext::frameRenderingQueued(evt); } void addUI() { cout << "creating UI" << endl; OgreBites::TrayManager* mTrayMgr = new OgreBites::TrayManager("InterfaceName", getRenderWindow(), &mlistener); mTrayMgr->setListener(&mlistener); mTrayMgr->showCursor(); mTrayMgr->showTrays(); mTrayMgr->showFrameStats(TL_BOTTOMLEFT, -1); Button* b = mTrayMgr->createButton(TL_TOPLEFT,"MyButton", "OK!", 50.0f); } };
TrayListener实现代码:
class MyTrayListener : public OgreBites::TrayListener { public: void buttonHit(OgreBites::Button* button) override { cout << "buttonHit"; //not printed, function not getting called if (button->getName() == "MyButton") { // Handle button click event here button->setCaption("Clicked!"); } } };
后续调整后的新问题:资源加载异常
编辑1:调整mlistener作用域
根据建议将mlistener移至类的公共作用域:
class MyApplication : public ApplicationContext, public InputListener { public: ShaderGenerator* shadergen = nullptr; SceneManager* scnMgr = nullptr; MyTrayListener mlistener; // <----------------- ... }
编辑2:资源文件找不到异常
将TrayManager的创建从setup()移至loadResources()后,TrayManager构造函数在以下代码行抛出文件未找到异常:
mCursor = (Ogre::OverlayContainer*)om.createOverlayElementFromTemplate("SdkTrays/Cursor", "Panel", nameBase + "Cursor");
我已将SdkTrays.zip添加至resources.cfg文件中,但问题仍未解决。
内容的提问来源于stack exchange,提问作者SKB_BGPL
相关产品推荐
相关产品推荐

