// NB using buffered input
GuiFrameListener(RenderWindow* win, Camera* cam, CEGUI::Renderer* renderer)
: ExampleFrameListener(win, cam, true, true), mGUIRenderer(renderer), mShutdownRequested(false) {
mMouse->setEventCallback( this ); mKeyboard->setEventCallback( this ); }
// Tell the frame listener to exit at the end of the next frame void requestShutdown(void) {
mShutdownRequested = true; }
bool frameEnded(const FrameEvent& evt) {
if (mShutdownRequested) return false; else
return ExampleFrameListener::frameEnded(evt); }
bool mouseMoved( const OIS::MouseEvent &e ) {
using namespace OIS;
CEGUI::System::getSingleton().injectMouseMove(e.state.X.rel,e.state.Y.rel); return true; }
bool mousePressed (const OIS::MouseEvent &e, OIS::MouseButtonID id) {
CEGUI::System::getSingleton().injectMouseButtonDown(convertOgreButtonToCegui(id)); return true; }
bool mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) {
CEGUI::System::getSingleton().injectMouseButtonUp(convertOgreButtonToCegui(id)); return true; }
bool keyPressed( const OIS::KeyEvent &e )
{
if(e.key == OIS::KC_ESCAPE) {
mShutdownRequested = true; return true; }
CEGUI::System::getSingleton().injectKeyDown(e.key); CEGUI::System::getSingleton().injectChar(e.text); return true; }
bool keyReleased( const OIS::KeyEvent &e ) {
CEGUI::System::getSingleton().injectKeyUp(e.key); return true; } };
在include语句后GuiFrameListener声明前添加下面代码
CEGUI::MouseButton convertOgreButtonToCegui(int buttonID) {
switch (buttonID) {
case MouseEvent::BUTTON0_MASK: return CEGUI::LeftButton;
case MouseEvent::BUTTON1_MASK: return CEGUI::RightButton; case MouseEvent::BUTTON2_MASK: return CEGUI::MiddleButton; case MouseEvent::BUTTON3_MASK: return CEGUI::X1Button; default:
return CEGUI::LeftButton; } }
Ogre 1.4.0
CEGUI::MouseButton convertOgreButtonToCegui(int buttonID) {
using namespace OIS; switch (buttonID) {
case OIS::MB_Left:
return CEGUI::LeftButton; case OIS::MB_Right:
return CEGUI::RightButton;
case OIS::MB_Middle:
return CEGUI::MiddleButton; default:
return CEGUI::LeftButton; } }
将下面语句添加到创建场景方法(createscene)的末尾。 setupEventHandlers();
现在你可以编译并执行程序了。实现效果是点击按钮后退出。
加载设置(Layout)
CEGUI使用XML格式来加载图形用户界面样式设置。复制下面xml代码到记事本,并将其以“Tutoral Gui.xml”命名另存在“\\media\\gui”文件夹下。