您的位置:首页 > 产品设计 > UI/UE

MyGUI FAQ

2013-09-04 16:18 211 查看
原文地址:http://www.ogre3d.org/tikiwiki/tiki-index.php?page=MyGUI+FAQ

问题一:

Q:不能正常运行,为什么?

A:检查MyGUI.log

问题二:

Q:为什么MyGUI找不到材质?

Q:为什么在创建任何widget时,会出现异常"layer '[any_layer_name]' not found"?

A:

1.在resources.cfg文件中,确认MyGUI_Media文件夹;

2.在默认resource group确认有MyGUI_Media文件夹;

从另一个resource group加载MyGUI,这样写:

mPlatform = new MyGUI::OgrePlatform();
mPlatform->initialise(mWindow, mSceneManager, "MyResourceGroupName");


问题三:

Q:为什么Combobox popup/Tab widget sheets selecting/RenderBox autorotate/Progress bar autotrack/Edit caret blinking/Message不能正常运行?

A:当你没有每帧调用inject时,就会出现这样的情况。

mGUI->injectFrameEntered(evt.timeSinceLastFrame);


注意:在MyGUI 3.0,这个方法不在了,这个方法会在渲染器内部会自动调用。

问题四:

Q:当改变camera时,为什么GUI会消失?

A:如果新的camera有新的Scene Manager,需要在新的SceneManager上设置GUI。

(MyGUI::OgrePlatform*)pPlatform->getRenderManagerPtr()->setSceneManager(newSceneManager);


问题五:

Q:必须要调用什么函数以确保当CheckBox被点击之后处于选中状态?

A:添加eventMouseButtonclick:

button->eventMouseButton<x>click = MyGUI::newDelegate(this, &[class_name]::notifyToggleCheck);

void [class_name]::notifyToggleCheck(MyGUI::WidgetPtr _sender)
{
MyGUI::ButtonPtr checkbox = _sender->castType<MyGUI::Button>();
checkbox->setStateSelected(!checkbox->getStateSelected());
}


或者如果你已经写了,那么添加这2行代码到on click 事件中。

问题六:

Q:我的代码可以编译并且运行。log不报任何错误,但是只能看到一个空白的屏幕(blank screen)。

A:确保在initialize ogre platform 类之前,你已经创建scene manager ,camera,以及viewport。或者之后创建并且调用。(只有这些部分不足以初始化场景,在你创建了Ogre::RenderSystem和Ogre::RenderWindow之后,你只需要设置viewport)

(MyGUI::OgrePlatform*)pPlatform->getRenderManagerPtr()->setSceneManager(mSceneManaer);
(MyGUI::OgrePlatform*)pPlatform->getRenderManagerPtr()->setRenderWindow(mWindow);
(MyGUI::OgrePlatform*)pPlatform->getRenderManagerPtr()->setActiveViewport(index);


问题七:

Q:代码编译通过并且可以运行,只显示场景,不显示GUI。

A(1):如果你在使用多viewport,需要告诉platform render manager 如下信息:

(MyGUI::OgrePlatform*)pPlatform->getRenderManagerPtr()->setActiveViewport(1);

这个参数是Ogre render window 中viewport的索引,并且等价于之前产生的MyGUI使用的viewport (这句话翻译的有问题)Ogre::RenderWindow::getNumViewports( )的返回值。

如果动态生成viewport,当删除一个viewport时,确保使用递减的索引来标识。

A(2):

确保在Ogre中初始化与之相应的的ResourceManager之后再初始化MyGUI。否则,虽然MyGUI.log提示可以正常找到.xml并且解析正常,但是gui仍然不显示。

Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();

// code code code ...

MyGUI::OgrePlatform* mPlatform = new MyGUI::OgrePlatform();
mPlatform->initialise(ogreRenderWindow, ogreSceneManager);
mGUI = new MyGUI::Gui();
mGUI->initialise();


A(3):

确保viewport启用overlays,只有当viewport的overlays启用时,MyGUI才会渲染。

viewport->setOverlaysEnabled(true);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: