Ogre中关于缓冲实现组合键播放动画的有关问题

Ogre中关于缓冲实现组合键播放动画的问题
小弟最近学习Ogre碰到了一个问题,就是当用缓冲输入的时候,同时按下两个键(即组合键)动画的播放会不正常,具体代码如下:


void ITutorial01::createScene(void)
{
  // Set the default lighting.
  mSceneMgr->setAmbientLight(Ogre::ColourValue(1.0f, 1.0f, 1.0f)); //设置环境光为白色
  // Create the entity
  mEntity = mSceneMgr->createEntity("Ninja", "Ninja.mesh"); //创建机器人节点
 
  // Create the scene node
  mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("NinjaNode", Ogre::Vector3(0.0f, 0.0f, 0.0f));
  mNode->attachObject(mEntity);

mCamNode = mNode->createChildSceneNode("CameraNode", Ogre::Vector3(0.0f, 280.0f, 160.0f));

mCamera->setPosition(mCamNode->getPosition());
mCamera->lookAt(mNode->getPosition() + Ogre::Vector3(0.0f, 85.0f, 0.0f));

mCamNode->attachObject(mCamera);
   
Ogre::Entity *ent;
//定义一个平面
Plane plane1(Vector3::UNIT_Y, 0);

//通过该平面创建一个地面
MeshManager::getSingleton().createPlane("ground",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane1,
15500,15500,5,5,true,1,5,5,Vector3::UNIT_Z);
 
ent=mSceneMgr->createEntity("GroundEntity","ground");//通过创建一个实体使地面显示出来
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);
ent->setMaterialName("Examples/Rockwall");//设置其纹理为石墙
ent->setCastShadows(false);//使地面不投影
   
}

void ITutorial01::createFrameListener(void){
  BaseApplication::createFrameListener();

  mAnimationState = mEntity->getAnimationState("Walk");
mAnimationState->setLoop(false);
mAnimationState->setEnabled(false);
  // Set default values for variables
mDirection = mNode->getOrientation() * Ogre::Vector3::UNIT_X;

sign = 0;

mToggle = true; //组合按键状态开关
mRotate = 0.13;

mStealthSpeed = 20.0f;
  mWalkSpeed = 85.0f;
  //mDirection = Ogre::Vector3::ZERO;
}  

 bool ITutorial01::keyPressed( const OIS::KeyEvent &arg )
{
switch (arg.key)
{
case OIS::KC_1:

mAnimationState = mEntity->getAnimationState("Attack1");
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
break;
 
case OIS::KC_2:

mAnimationState = mEntity->getAnimationState("Attack2");
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
break;

case OIS::KC_3:

mAnimationState = mEntity->getAnimationState("Attack3");
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
break;

case OIS::KC_4:

mAnimationState = mEntity->getAnimationState("Backflip");
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
break;

case OIS::KC_LCONTROL:
if(::GetAsyncKeyState(0x57) & 0x8000f)
{
sign = STEALTH;
mAnimationState = mEntity->getAnimationState("Stealth");
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
break;
}


case OIS::KC_W:
if(::GetAsyncKeyState(VK_LCONTROL) & 0x8000f)
{

sign = STEALTH;
mAnimationState = mEntity->getAnimationState("Stealth");
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
break;

}
else{
sign = WALK;
mAnimationState = mEntity->getAnimationState("Walk");