Ogre 中带有 sdkTrays 的未处理异常小部件
unhandled exception widget with sdkTrays in Ogre
我对 Ogre 中的 sdkTrays 有一些严重的问题。
我有一个继承自 BaseApplication 的 OgreKinectGame。 BaseApplication 正在使用 sdkTrayManager 创建徽标等。我还以为这个mTrayMgr是继承过来的,也可以用在我的应用中
我正在尝试为 HUD 设置小部件,但遇到未处理的异常错误。
我的 setupWidgets() 函数如下所示。
void OgreKinectGame::setupWidgets()
{
if(!mTrayMgr)
mTrayMgr = new SdkTrayManager("InterfaceName", mWindow, mMouse);
//mTrayMgr->destroyAllWidgets(); this caused exceptions as well
// create check boxes to toggle the visibility of our particle systems
const int WIDTH_UI = 160;
// main menu
mTrayMgr->createLabel(TL_CENTER, "mMainMenuLabel", "Main Menu", WIDTH_UI);
mTrayMgr->createButton(TL_CENTER, "mOptionButton", "Option");
mTrayMgr->createButton(TL_CENTER, "mCreditButton", "About");
mTrayMgr->createButton(TL_CENTER, "mQuitButton", "Quit");
mTrayMgr->showAll();
}
首先,您在哪里初始化了 setupWidgets()? ,在 BaseApplication class 上,他们有 setup(),你可以创建一个虚拟的这个 setup() 到你的主 class,然后在那里初始化你的 setupWiget(),例如,
bool OgreKinectGame::setup(void)
{
if (!BaseApplication::setup()) {
return false;
}
// Load fonts for tray captions
FontManager::getSingleton().getByName("SdkTrays/Caption")->load();
setupWidgets();//initialize here for your setupWidget()
}
第二,我觉得你的setupWidget()应该是这样的,
void OgreKinectGame::setupWidgets()
{
const int WIDTH_UI = 160;
// main menu
mTrayMgr->createLabel(TL_CENTER, "mMainMenuLabel", "Main Menu", WIDTH_UI);
mTrayMgr->createButton(TL_CENTER, "mOptionButton", "Option");
mTrayMgr->createButton(TL_CENTER, "mCreditButton", "About");
mTrayMgr->createButton(TL_CENTER, "mQuitButton", "Quit");
}
如果仍然崩溃,你能尝试这个解决方案并再次返回吗?
我对 Ogre 中的 sdkTrays 有一些严重的问题。
我有一个继承自 BaseApplication 的 OgreKinectGame。 BaseApplication 正在使用 sdkTrayManager 创建徽标等。我还以为这个mTrayMgr是继承过来的,也可以用在我的应用中
我正在尝试为 HUD 设置小部件,但遇到未处理的异常错误。
我的 setupWidgets() 函数如下所示。
void OgreKinectGame::setupWidgets()
{
if(!mTrayMgr)
mTrayMgr = new SdkTrayManager("InterfaceName", mWindow, mMouse);
//mTrayMgr->destroyAllWidgets(); this caused exceptions as well
// create check boxes to toggle the visibility of our particle systems
const int WIDTH_UI = 160;
// main menu
mTrayMgr->createLabel(TL_CENTER, "mMainMenuLabel", "Main Menu", WIDTH_UI);
mTrayMgr->createButton(TL_CENTER, "mOptionButton", "Option");
mTrayMgr->createButton(TL_CENTER, "mCreditButton", "About");
mTrayMgr->createButton(TL_CENTER, "mQuitButton", "Quit");
mTrayMgr->showAll();
}
首先,您在哪里初始化了 setupWidgets()? ,在 BaseApplication class 上,他们有 setup(),你可以创建一个虚拟的这个 setup() 到你的主 class,然后在那里初始化你的 setupWiget(),例如,
bool OgreKinectGame::setup(void)
{
if (!BaseApplication::setup()) {
return false;
}
// Load fonts for tray captions
FontManager::getSingleton().getByName("SdkTrays/Caption")->load();
setupWidgets();//initialize here for your setupWidget()
}
第二,我觉得你的setupWidget()应该是这样的,
void OgreKinectGame::setupWidgets()
{
const int WIDTH_UI = 160;
// main menu
mTrayMgr->createLabel(TL_CENTER, "mMainMenuLabel", "Main Menu", WIDTH_UI);
mTrayMgr->createButton(TL_CENTER, "mOptionButton", "Option");
mTrayMgr->createButton(TL_CENTER, "mCreditButton", "About");
mTrayMgr->createButton(TL_CENTER, "mQuitButton", "Quit");
}
如果仍然崩溃,你能尝试这个解决方案并再次返回吗?