Ogre笔记(4)

增加动画:

Ogre::Entity* _ent; // 增加动画效果的实体的指针
Ogre::AnimationState* _aniState; // 所使用动画状态的指针
_aniState = _ent->getAnimationState("Dance"); // 获取“Dance”动画状态
_aniState->setEnabled(true); // 允许动画
_aniState->setLoop(true); // 允许动画循环
_aniState->addTime(evt.timeSinceLastFrame); // 距上次刷新的时间

设定移动按键响应:

if(_key->isKeyDown(OIS::KC_UP))
{
  SinbadTranslate
+= Ogre::Vector3(0,0,-1);
  _rotation
= 3.14f;
  walked
= true;
}
if(_key->isKeyDown(OIS::KC_DOWN))
{
  SinbadTranslate
+= Ogre::Vector3(0,0,1);
  _rotation
= 0.0f;
  walked
= true;
}
if(_key->isKeyDown(OIS::KC_LEFT))
{
  SinbadTranslate
+= Ogre::Vector3(-1,0,0);
  _rotation
= -1.57f;
  walked
= true;
}
if(_key->isKeyDown(OIS::KC_RIGHT))
{
  SinbadTranslate
+= Ogre::Vector3(1,0,0);
  _rotation
= 1.57f;
  walked
= true;
}

判定是否在行走:

if(walked)
{
  _aniState
->setEnabled(true);
  _aniStateTop
->setEnabled(true);
  
if(_aniState->hasEnded())
  {
    _aniState
->setTimePosition(0.0f);
  }
  
if(_aniStateTop->hasEnded())
  {
    _aniStateTop
->setTimePosition(0.0f);
  }
}
else
{
  _aniState
->setTimePosition(0.0f);
  _aniState
->setEnabled(false);
  _aniStateTop
->setTimePosition(0.0f);
  _aniStateTop
->setEnabled(false);
}

旋转模型节点:

_node->resetOrientation();
_node
->yaw(Ogre::Radian(_rotation));

增加物体到相应部位:

_SinbadEnt->attachObjectToBone("Handle.L", sword1);
_SinbadEnt
->attachObjectToBone("Handle.R", sword2);

输出所有动画名:

Ogre::AnimationStateSet* set = _SinbadEnt->getAllAnimationStates();
Ogre::AnimationStateIterator iter
= set->getAnimationStateIterator();
while(iter.hasMoreElements())
{
  std::cout
<< iter.getNext()->getAnimationName() << std::endl;
}

posted @ 2011-05-04 16:30  橘子小酥  阅读(409)  评论(0编辑  收藏  举报