as3解析人物动作序列图

简介: 这里以《神仙道》中某一人物资源为例子,它的每一个动作都经过了处理,以中心点为基准点(这样就不需要程序来控制偏移量了,否则程序要改变bitmapData时还需要改变bitmap的坐标)。 一个跑动的动作它细分为20张图片,每一张图片它的大小为:1900 / 20 = 95px; 1、加载资源 ...

这里以《神仙道》中某一人物资源为例子,它的每一个动作都经过了处理,以中心点为基准点(这样就不需要程序来控制偏移量了,否则程序要改变bitmapData时还需要改变bitmap的坐标)。

一个跑动的动作它细分为20张图片,每一张图片它的大小为:1900 / 20 = 95px;

1、加载资源

2、分解动作

parseBitmapData(bmpData, 95, 118);

private function parseBitmapData(bmpData:BitmapData, w:Number, h:Number):void
{
var matrix:Matrix = new Matrix();
var rectangle:Rectangle = new Rectangle();
var pt:Point = new Point();

rectangle.width = w;
rectangle.height = h;

var actionCount:int = 20;

while (actionCount--)
{
var bmd:BitmapData = new BitmapData(rectangle.width, rectangle.height, true, 0);
bmd.copyPixels(bmpData, rectangle, pt);

rectangle.x += rectangle.width;

_actionList.push(bmd);
}
}

3、播放动作(可使用enterframe或者timer进行处理)

private function initPlay():void
{
_currFrame = 0;
_actionIdx = 0;

_bmd = new Bitmap(_actionList[_actionIdx], 'auto', true);
_bmd.x = 100;
_bmd.y = 100;
addChild(_bmd);

addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

private function onEnterFrame(evt:Event):void
{
_currFrame++;
if (_currFrame % 1 == 0)
{
_actionIdx++;

if (_actionIdx >= _actionList.length)
{
_actionIdx = 0;
}

_bmd.bitmapData = _actionList[_actionIdx];


//人物移动
_bmd.x += _moveStep;

if (_bmd.x > stage.stageWidth || _bmd.x < 0)
{
_moveStep *= -1;
_bmd.scaleX *= -1;
}

}
}

上面_currFrame % 1,这里可以注释掉,之所有留着的原因是因为有些动作(比如“闪避”)它每一步播放的间隔帧数可能不太一样(一般是通过配置来确定)。

 

最后上面示例代码运行的效果如下,来回跑:

 

这只是一个demo,提供一个思路,具体到游戏产品中,所有的行走、打坐、坐骑..是通过一个全局的管理器(比如EnterFrame处理器)来控制的。

fla和swf文件打包上传到百度云,压缩包的下载地址>>   (注:我使用的flash版本是cs5.5,如果使用低版本的flash是打不开源文件的)

 

如果动作序列图不是上面这样,它是以左顶点为基准来进行动作处理的,那么就需要配置各种偏移量了,比如下面这个:

这个只是我从XML配置文件里截取的某一个动作的配置。配置文件里面其实还有每一张序列图之间间隔的帧数,类似下面的配置

18表示,该动作由18张序列图组成,i里面就是各个序列图执行时的间隔帧数,上面的是2(1/2 <=> 序列索引/间隔帧数)

 

两种的处理方法呢,差不了太多,主要是由美术那边渲染动作来决定的,如果都是以中心点来渲就没有这个问题,如果连续不太规则的就需要使用配置来说明,每一张序列图它的偏移量,宽和高。

目录
相关文章
|
16小时前
|
存储 算法
从动态规划到贪心算法:最长递增子序列问题的方法全解析
从动态规划到贪心算法:最长递增子序列问题的方法全解析
110 2
|
16小时前
|
存储 数据库 Python
|
16小时前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 187. 重复的DNA序列 算法解析
☆打卡算法☆LeetCode 187. 重复的DNA序列 算法解析
|
6月前
|
机器学习/深度学习 存储 自然语言处理
深入解析序列模型:全面阐释 RNN、LSTM 与 Seq2Seq 的秘密
深入解析序列模型:全面阐释 RNN、LSTM 与 Seq2Seq 的秘密
90 0
|
9月前
从排列字符串到排列序列:解析增减字符串匹配问题
题目要求根据给定的字符串 s,构造一个排列序列 perm,其中排列序列中的数字满足以下规则: 如果 perm[i] < perm[i + 1],则对应的字符为 'I'; 如果 perm[i] > perm[i + 1],则对应的字符为 'D'。 我们需要根据字符串 s 中的字符,构造满足上述规则的排列序列 perm。
41 0
|
9月前
|
C++
从排列字符串到排列序列:解析增减字符串匹配问题
在这篇文章中,我们将解决 LeetCode 题目 "942. 增减字符串匹配",这是一个简单级别的题目,涉及到排列字符串和排列序列的转换。我们将详细讨论问题背景、解题思路、代码实现,同时进行必要的知识点罗列和总结。
39 0
|
9月前
|
Java 数据库连接 数据库
解析Java中的MyBatis Plus注解 @KeySequence:高效处理主键序列生成
在数据库设计中,主键的生成方式多种多样,而序列(Sequence)是一种常见的生成主键的方式。MyBatis Plus作为一款优秀的ORM框架,提供了注解 `@KeySequence`,使得开发者可以轻松地处理基于序列的主键生成,而不必手动处理序列的获取和使用。本文将详细介绍 `@KeySequence` 注解的用法及其在持久层开发中的应用。
3252 0
|
12月前
|
JSON 数据格式
Json解析问题—数组用Gson反序列化为List双引号消失
现在的目的是这样的,我想从一串Object类型的字符串,转化成对应的实体类对象。 简单来说就是把这个字符串给一个个独立分开。 我先写出实体类对象和Json的数据,看完再开始解析。
107 0
|
Python
Python def定义函数并进行序列解包源码操作解析
Python def定义函数并进行序列解包源码操作解析
69 0
|
存储 算法
☆打卡算法☆LeetCode 128. 最长连续序列 算法解析
“给定一个未排序的整数数组,找出数字连续的最长序列的长度。”

推荐镜像

更多