zoukankan      html  css  js  c++  java
  • as3解析人物动作序列图

    这里以《神仙道》中某一人物资源为例子,它的每一个动作都经过了处理,以中心点为基准点(这样就不需要程序来控制偏移量了,否则程序要改变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 <=> 序列索引/间隔帧数)

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

  • 相关阅读:
    vux 局部注册组件
    vux 全局注册组件
    axios请求本地json
    vux报错 this指针问题
    Vue如何引入远程JS文件
    报错 ERROR in static/js/vendor.b3f56e9e0cd56988d890.js from UglifyJs
    封装axios
    js判断手机型号
    js判断是否在微信浏览器打开
    nginx+tomcat实现负载均衡以及session共享(linux centos7环境)
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/2919071.html
Copyright © 2011-2022 走看看