增加动画:
Ogre::Entity
*
_ent;
//
增加动画效果的实体的指针
Ogre::AnimationState * _aniState; // 所使用动画状态的指针
Ogre::AnimationState * _aniState; // 所使用动画状态的指针
_aniState
=
_ent
->
getAnimationState(
"
Dance
"
);
//
获取“Dance”动画状态
_aniState -> setEnabled( true ); // 允许动画
_aniState -> setLoop( true ); // 允许动画循环
_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 ;
}
{
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 );
}
{
_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));
_node -> yaw(Ogre::Radian(_rotation));
增加物体到相应部位:
_SinbadEnt
->
attachObjectToBone(
"
Handle.L
"
, sword1);
_SinbadEnt -> attachObjectToBone( " Handle.R " , sword2);
_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;
}
Ogre::AnimationStateIterator iter = set -> getAnimationStateIterator();
while (iter.hasMoreElements())
{
std::cout << iter.getNext() -> getAnimationName() << std::endl;
}