Создание и масштабирование спрайт-листов из мувиклипа

Я пытаюсь создать спрайт листы из видеоклипов, а затем масштабировать его в зависимости от разрешения экрана. Также мне нужно знать точную высоту и ширину рамки. Вот код, который я использую: (ПРИМЕЧАНИЕ: 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, который масштабируется до круглого числа, а затем рисует на нем рамку мувиклипа (масштабируется), а затем этот объект рисуется на листе спрайта. Я обновил функцию с новым кодом. Если у кого-то есть другое решение, мне бы очень хотелось знать.

1 ответ

Взгляните на это, этот класс позволяет вам преобразовать мувиклип в растровую таблицу

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

Этот класс выводится в исходный текстурный алтлас, но требует незначительных изменений для получения обычного bitmapData.

Другой способ - использовать flash cs6 > щелкните правой кнопкой мыши по мувиклипу в библиотеке и выберите "преобразовать в таблицу".

Другие вопросы по тегам