3D战斗游戏之基于数据库的精灵动画篇1

2015年03月17日 10:52 0 点赞 0 评论 更新于 2017-05-08 12:28

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

在完成运动模式的准备工作后,接下来我们将聚焦于解决精灵动画的问题。

精灵动画指定方式

在Cocos引擎中,对3D精灵动画的支持可以通过时间或帧数来指定。

通过时间指定

若一个动作的时间范围是从0.1秒到0.3秒,可使用以下语句指定该动画:

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

通过帧数指定

若该动作对应的帧数是第12帧到第20帧,则可使用如下语句指定:

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

传统动画序列处理的不足

我们已经了解了基本的精灵动画指定方法。在一般程序中,通常会将动画序列直接写在代码里。这种方式存在明显的弊端,例如每添加一个精灵或一个动作,都需要对程序进行修改。以FantasyWarrior3D的相关代码为例:

-- 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代码中的帧序列,这样可以节省不少工作量。

1. 在boss库添加记录

首先,在boss库中添加一条新记录,指定一个新boss使用mage.c3b模型,并设置渲染文件的缩放比例等参数。

2. 在boss_action库添加动作记录

接下来,这是本节的重点。在boss_action库中,将mage的动作信息录入。本次我们采用按帧定义动画的方式,暂时不填写时间参数,仅填写各个动作的名称、开始帧数和结束帧数。

至此,我们已经完成了基于数据库的精灵动画定义。那么,如何在程序中依据数据库记录实现各个动作的播放呢?这个问题将在下一节继续探讨。

mage在程序中的实现

这里展示一下mage在我的程序中的实现效果。之前的小白人模型不太美观,换上mage模型后,视觉效果有了一定提升。

帧数信息调整

后来经过仔细观察,发现mage模型的动作衔接不顺畅,存在明显的跳帧现象。这可能是因为直接抄袭Lua代码中的帧数信息存在问题。重新整理后的帧数信息如下(此处应补充重新整理后的帧数信息)。这些帧数据的特点是,每个动作完成后都会回到idle状态的姿势,这样在配合状态机进行切换时,就可以避免跳帧现象的产生。

作者信息

boke

boke

共发布了 1025 篇文章