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のフレームを描画する(スケーリングされる)よりも、そのオブジェクトがスプライトシートに描画されるよりも優れています。新しいコードで関数を更新しました。誰かが別の解決策を持っているなら、私は本当に知りたいです。

4

1 に答える 1

0

これを見てください。このクラスを使用すると、ムービークリップをビットマップスプライトシートに変換できます。

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

このクラスはスターリングテクスチャアルトラスに出力されますが、通常のbitmapDataを取得するには小さな変更が必要です。

別の方法は、フラッシュcs6を使用することです>ライブラリ内のムービークリップを右クリックし、[sprtiesheetに変換]を選択します

于 2012-10-26T15:16:53.387 に答える