从Movieclip创建和缩放精灵片



我正在尝试从电影剪辑中创建一个精灵片,然后根据屏幕的分辨率将其缩放。另外,我需要知道框架的确切高度和宽度。这是我使用的代码:(注意:bimapwithdimension是我所做的自定义类,用于存储位图数据,宽度和高度; _m-是一个矩阵)

private function createSpriteSheet(mc:Class):BimapWithDimension
{
        var _bD:BimapWithDimension = new BimapWithDimension();
        var _mc:MovieClip = new mc();
        _mc.gotoAndStop(1);
        var _frejmoviVoRed:int = _mc.totalFrames < 10 ? _mc.totalFrames : 10;
        var _redovi:int = Math.ceil(_mc.totalFrames/_frejmoviVoRed);
        var _h:int = _mc.height * _redovi;
        _bmp = new BitmapData((_mc.width * _frejmoviVoRed) * _appScale, _h * _appScale, true, 0x00000000);
        var _sirina:int = Math.ceil(_mc.width * _appScale);
        var _visina:int = Math.ceil(_mc.height * _appScale);
        var _bmp1:BitmapData = new BitmapData(_sirina, _visina);
        var _rect:Rectangle = new Rectangle(0, 0, _sirina, _visina);
        for (var i:uint = 0; i < _mc.totalFrames; i++)
        {
            _bmp1.fillRect(_rect, 0x000000);
            _m.identity();
            _m.scale(_appScale, _appScale);
            _bmp1.draw(_mc, _m );
            _m.identity();
            _m.translate(_sirina * (i % _frejmoviVoRed), _visina * Math.floor(i / _frejmoviVoRed));
            _bmp.draw(_bmp1, _m);
            _mc.nextFrame();
        }
        _bD.bmp = _bmp; 
        _bD.width = _sirina;
        _bD.height = _visina;
        return _bD;
}

现在问题是某些决议的维度是错误的。例如。在480x320的分辨率下,有些床单没有相同的宽度,即存储和实际绘制宽度的宽度。我猜这是由于四舍五入的,但是无论我如何尝试纠正这个值(使用casting to in to int,math.floor()或Math.ceil()),我都不能。

那么,如何找出真正的宽度和高度?

编辑:我找到了一个...假设一个半解决方案。我介绍了另一个比特马普达塔(Bitmapdata),比绘制Moviclip的框架(缩放),而该对象则是在精灵片上绘制的对象。我使用新代码更新了功能。如果有人有另一个解决方案,我真的很想知道。

对此有所了解,此类允许您将MovieClip转换为位图SpriteSheet

https://github.com/emibap/dynamic-texture-atlas-generator/blob/master/dynamictextextureatlasgenerator/src/src/com/emibap/emibap/textureatlas/dynamicatlas.as

此类输出到Starling Texture Altlas,但需要较小的更改才能获得常规的Bitmapdata。

另一种方法是使用Flash CS6>右键单击库中的MovieClip,然后选择"转换为sprtiesheet"

最新更新