加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 19:48:06 所属栏目:百科 来源:网络整理
导读:项目一忙,这教程就顾不上了,呵呵。今天头脑稍得一点空闲,把上次没说完的动画说完。 直接贴代码,呵呵: vectormapstring,string vect_action = DBHelper::GetTable("select action_name,s_frame,e_frame,action_times,action_timee,action_cd,skill_id,bu

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


直接贴代码,呵呵:


vector<map<string,string>> vect_action = DBHelper::GetTable("select action_name,s_frame,e_frame,action_times,action_timee,action_cd,skill_id,bullet_delay 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<string,string> m_action = vect_action[i_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;//<span style="font-family: Arial,Helvetica,sans-serif;">Tag_idle 设为当前容器尺寸</span>
	}
	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;<span style="font-family: Arial,sans-serif;">//</span><span style="font-family: Arial,sans-serif;">Tag_move 设为当前容器尺寸</span>
	}
	else {
	  //其他动作代码。。。。。。。。。。。。。。
	}
}


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


在需要boss播放idle动画的时候,你只需要在程序中,简单地执行下面的语句即可:

runAction(vecAnimate.at(Tag_idle));

同理播放move动画,只需执行:

runAction(vecAnimate.at(Tag_move));


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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读