cocos2dx 3D战斗类游戏制作:【三】——基于数据库的3D精灵动画2

项目一忙,这教程就顾不上了,呵呵。今天头脑稍得一点空闲,把上次没说完的动画说完。

直接贴代码,呵呵:

vector<map> vect_action = DBHelper::GetTable("select action_name,s_frame,e_frame,action_times,action_timee from boss_action where boss_id=" + BossID);//从boss_action中,按bossID取出boss所有的action,也就是动画序列
for (int i_action = 0; i_action < vect_action.size(); i_action++)
{
    map m_action = vect_action;
    //auto animate = Animate3D::create(animation, atof(m_action"action_times"].c_str()), atof(m_action"action_timee"].c_str()));//按动画开始与结束时间处理动画
    auto animate = Animate3D::createWithFrames(animation, atoi(m_action"s_frame"].c_str()), atoi(m_action"e_frame"].c_str()));//按动画开始与结束帧数处理动画
    if (strcmp(m_action"action_name"].c_str(), "idle") == 0){
        _idle = animate;
        _idle->retain();
        vecAnimate.push_back(animate);//idle动画推入容器
        Tag_idle = vecAnimate.size() - 1;//Tag_idle 设为当前容器尺寸
    }
    else if (strcmp(m_action"action_name"].c_str(), "move") == 0){
        _move = animate;
        _move->retain();
        vecAnimate.push_back(animate);//move动画推入容器
        Tag_move = vecAnimate.size() - 1;//Tag_move 设为当前容器尺寸
    }
    else {
      //其他动作代码。。。。。。。。。。。。。。
    }
}

```

在上面,我们已经遍历了一个boss所有的动作的动画,并且分别封装起来推进了vecAnimate容器里面。

在需要boss播放idle动画的时候,你只需要在程序中,简单地执行下面的语句即可:
runAction(vecAnimate.at(Tag_idle));
```

同理播放move动画,只需执行:
runAction(vecAnimate.at(Tag_move));
```


本方法中,可以使用时间间隔,或者帧数间隔来定义动画,只需要把代码中注释掉的时间间隔语句启用(同时必须把帧数部分注释掉哦)即可


贴一下游戏进展截图,呵呵,骑着神龟在无垠太空作战的贱天使哪!UI居然暂时是程序员做的:15:    


有好多好多美术的细节要去处理,有没有美工同学愿意来义务帮忙啊:882:  


 

楼主,源码可否分享下

楼主 求代码分享 支持开源 幸福万年

:2::2::2::2: