参考:3D战斗游戏之运动模式准备篇2

       好了,做完运动模式的准备,下来就是该解决精灵动画的问题了。

       在cocos之中,对3D精灵动画的支持有通过时间和通过帧数来指定。

       比如一个动作,其时间是0.1->0.3,那么可以用如下语句来指定这个动画:

1
auto animate = Animate3D::create(animation, 0.1f,0.3f);

如果其帧数是第12-20帧,那么可以用如下语句来指定:

1
auto animate = Animate3D::createWithFrames(animation, 12,20);

OK,基本的方法我们了解了。一般的程序,都是把这个动画序列写在程序里面,那样你要加一个精灵,就得重新写一个程序;要加一个动作,也要改一次程序。例如FantasyWarrior3D的相关代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- init Mage animations=============================
do
    Mage._action = {
        idle = createAnimation(file,206,229,0.7),
        walk = createAnimation(file,99,119,0.7),
        attack1 = createAnimation(file,12,30,0.7),
        attack2 = createAnimation(file,31,49,0.7),
        specialattack1 = createAnimation(file,56,74,0.2),
        specialattack2 = createAnimation(file,75,92,0.2),
        defend = createAnimation(file,1,5,0.7),
        knocked = createAnimation(file,126,132,0.7),
        dead = createAnimation(file,139,199,0.7)
    }
end

怎么办?我从自己的程序里面抽取一个思路出来跟朋友们交流。先说明了是个思路,因为我的程序不知不觉已经很庞大了,想抽取整个实现流程居然变得不太现实了。


       在第一章的时候,我们说到了,boss是使用数据库定义的,其配套有个boss_action数据库,用于存储某个boss的序列动作。这里详细贴一下。

        我们照用FantasyWarrior3D的mage.c3b模型,照抄上面lua里面的帧序列哈,多省事啊。

       首先,是在boss库增加一条记录,指定一个新boss使用mage.c3b模型,并且指定一下渲染文件缩放比例啥的。

41_376787_258270c44b9d280.jpg

        然后,本节重点来了,呵呵,在boss_action库,把mage的动作给抄进去。这次对于mage就先用按帧定义其动画的方式吧,时间参数就先不填了,呵呵,只填各个动作名称、开始与结束帧数。

41_376787_b29a35781b6bf32.jpg

         好了,这就定义好了,如何在程序里面依靠数据库的记录,来实现各个动作的播放呢?此问题下一节再继续写。

        先来个mage在我的程序的实现图,之前的小白人太丑啦,换上mage,稍微好看一点点。

41_376787_aa54634cf9d3533.jpg

        补记,后来仔细看了一下,发现mage模型的动作衔接不顺,有明显跳帧现象,看来抄袭lua代码里面的帧数填入不对呢。重新整理的帧数信息如下:

41_376787_44b547336c92f90.jpg

       这个帧数据,是每做完一个动作,都会回到idle状态那个姿势的,这样配合状态机的切换,就不会产生跳帧现象了。