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;
}
---------------------------------------------------------------------------
You got a dream
You gotta protect it
People can't do something themselves
They wanna tell you you can do it
If you want something
Go get it
You got a dream
You gotta protect it
People can't do something themselves
They wanna tell you you can do it
If you want something
Go get it