quitButton->setSize(CEGUI::UVector2(cegui_reldim(0.35f), cegui_reldim( 0.1f)) ); 响应事件
将下面函数添加到TutorialApplication的public:中 void setupEventHandlers(void) {
CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton();
wmgr.getWindow((CEGUI::utf8*)\:PushButton::EventClicked, CEGUI::Event::Subscriber
(&TutorialApplication::handleQuit, this)); }
bool handleQuit(const CEGUI::EventArgs& e) {
static_cast
return true; }
重写 GuiFrameListener 类来响应键盘和鼠标输入
class GuiFrameListener : public ExampleFrameListener, public MouseMotionListener, public MouseListener
{ private:
CEGUI::Renderer* mGUIRenderer; bool mShutdownRequested; public:
// NB using buffered input
GuiFrameListener(RenderWindow* win, Camera* cam, CEGUI::Renderer* renderer)
: ExampleFrameListener(win, cam, true, true), mGUIRenderer(renderer), mShutdownRequested(false) {
mEventProcessor->addMouseMotionListener(this); mEventProcessor->addMouseListener(this); mEventProcessor->addKeyListener(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); }
void mouseMoved (MouseEvent *e) {
CEGUI::System::getSingleton().injectMouseMove( e->getRelX() * mGUIRenderer->getWidth(), e->getRelY() * mGUIRenderer->getHeight()); e->consume(); }
void mouseDragged (MouseEvent *e) {
mouseMoved(e); }
void mousePressed (MouseEvent *e) {
CEGUI::System::getSingleton().injectMouseButtonDown( convertOgreButtonToCegui(e->getButtonID())); e->consume();
}
void mouseReleased (MouseEvent *e) {
CEGUI::System::getSingleton().injectMouseButtonUp( convertOgreButtonToCegui(e->getButtonID())); e->consume(); }
void mouseClicked(MouseEvent* e) {} void mouseEntered(MouseEvent* e) {} void mouseExited(MouseEvent* e) {} void keyPressed(KeyEvent* e) {
if(e->getKey() == KC_ESCAPE) {
mShutdownRequested = true; e->consume(); return; }
CEGUI::System::getSingleton().injectKeyDown(e->getKey()); CEGUI::System::getSingleton().injectChar(e->getKeyChar()); e->consume(); }
void keyReleased(KeyEvent* e) {
CEGUI::System::getSingleton().injectKeyUp(e->getKey()); e->consume(); }
void keyClicked(KeyEvent* e) {
// Do nothing e->consume(); } };
Ogre 1.4.0
如果你使用的是Ogre 1.4.0 你将会要使用OIS。在Ogre3d中使用OIS的更多细节,请参阅使用OIS并且再看一看基础教程5:
class GuiFrameListener : public ExampleFrameListener, public OIS::MouseListener, public OIS::KeyListener { private:
CEGUI::Renderer* mGUIRenderer; bool mShutdownRequested; public: