You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:38:17