1

我正在尝试从影片剪辑创建一个精灵表,然后根据屏幕的分辨率对其进行缩放。另外,我需要知道框架的确切高度和宽度。这是我使用的代码:(注意: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 的分辨率下,某些工作表的宽度不同,即存储的宽度和实际绘制的宽度。我猜这是由于对值进行了四舍五入,但无论我如何尝试纠正这个问题(使用强制转换为 int、Math.floor() 或 Math.ceil()),我都不能。

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

编辑:我找到了一个......让我们说一个半解决方案。我介绍了另一个 BitmapData,它被缩放到一个整数,然后在其上绘制 moviclip 的帧(缩放),然后在 sprite 表上绘制该对象。我用新代码更新了函数。如果有人有其他解决方案,我真的很想知道。

4

1 回答 1

0

Have a look to this, this class allow you to transform a movieclip into a bitmap spritesheet

https://github.com/emibap/Dynamic-Texture-Atlas-Generator/blob/master/dynamicTextureAtlasGenerator/src/com/emibap/textureAtlas/DynamicAtlas.as

This class output to starling texture altlas but it require minor change to obtain a regular bitmapData.

Another way is to use flash cs6 > right click on your movieclip in the library and select 'convert to sprtiesheet'

于 2012-10-26T15:16:53.387 回答