Ogre按键消息
现在来看ogre的按键消息。
class TutorialApplication : public BaseApplication
{
public:
TutorialApplication(void);
virtual ~TutorialApplication(void);
protected:
virtual void createScene(void);
virtual bool frameRenderingQueued(const Ogre::FrameEvent& fe);
private:
bool processUnbufferedInput(const Ogre::FrameEvent& fe);
};
//---------------------------------------------------------------------------
void TutorialApplication::createScene(void)
{
// Create your scene here :)
mSceneMgr->setAmbientLight(Ogre::ColourValue(.25, .25, .25));
Ogre::Light * pointLight = mSceneMgr->createLight("PointLight");
pointLight->setType(Ogre::Light::LT_POINT);
pointLight->setPosition(250,150,250);
pointLight->setDiffuseColour(Ogre::ColourValue::White);
pointLight->setSpecularColour(Ogre::ColourValue::White);
Ogre::Entity* nijnaEnity = mSceneMgr->createEntity("ninja.mesh");
Ogre::SceneNode* nijnaNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("NinjaNode");
nijnaNode->attachObject(nijnaEnity);
}
bool TutorialApplication::frameRenderingQueued(const Ogre::FrameEvent& fe)
{
bool ret = BaseApplication::frameRenderingQueued(fe);
if (!processUnbufferedInput(fe))
{
return false;
}
return ret;
}
bool TutorialApplication::processUnbufferedInput(const Ogre::FrameEvent& fe)
{
static bool mouseDownLastFrame = false;
static Ogre::Real toggleTimer = 0.0;
static Ogre::Real rotate = .13;
static Ogre::Real move = 250;
bool leftMouseDown = mMouse->getMouseState().buttonDown(OIS::MB_Left);
if (leftMouseDown && !mouseDownLastFrame)
{
Ogre::Light* light = mSceneMgr->getLight("PointLight");
light->setVisible(!light->isVisible());
}
mouseDownLastFrame = leftMouseDown;
toggleTimer -= fe.timeSinceLastFrame;
if ((toggleTimer < 0)&& mMouse->getMouseState().buttonDown(OIS::MB_Right))
{
toggleTimer = 0.5;
Ogre::Light* light = mSceneMgr->getLight("PointLight");
light->setVisible(!light->isVisible());
}
Ogre::Vector3 dirVec = Ogre::Vector3::ZERO;
if (mKeyboard->isKeyDown(OIS::KC_I))
{
dirVec.z -= move;
}
if (mKeyboard->isKeyDown(OIS::KC_K))
{
dirVec.z += move;
}
if (mKeyboard->isKeyDown(OIS::KC_U))
{
dirVec.y += move;
}
if (mKeyboard->isKeyDown(OIS::KC_O))
{
dirVec.y -= move;
}
if (mKeyboard->isKeyDown(OIS::KC_J))
{
if (mKeyboard->isKeyDown(OIS::KC_LSHIFT))
mSceneMgr->getSceneNode("NinjaNode")->yaw(Ogre::Degree(5 * rotate));
else
dirVec.x -= move;
}
if (mKeyboard->isKeyDown(OIS::KC_L))
{
if (mKeyboard->isKeyDown(OIS::KC_LSHIFT))
mSceneMgr->getSceneNode("NinjaNode")->yaw(Ogre::Degree(-5 * rotate));
else
dirVec.x += move;
}
mSceneMgr->getSceneNode("NinjaNode")->translate(
dirVec * fe.timeSinceLastFrame,
Ogre::Node::TS_LOCAL);
return true;
}
我们在每一帧来检测按钮的响应。然后移动ninja.