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 <=> 序列索引/間隔幀數)

兩種的處理方法呢,差不了太多,主要是由美術那邊渲染動作來決定的,如果都是以中心點來渲就沒有這個問題,如果連續不太規則的就需要使用配置來說明,每一張序列圖它的偏移量,寬和高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章