我正在尝试从影片剪辑创建精灵表,然后根据屏幕的分辨率进行缩放。另外,我需要知道框架的确切高度和宽度。这是我使用的代码:(注意: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的框架(缩放),然后在精灵表上绘制该对象。我用新代码更新了函数。如果有人有其他解决方案,我真的很想知道。答案 0 :(得分:0)
看看这个,这个类允许你将一个movieclip转换成一个位图spritesheet
此类输出为starling texture altlas,但需要稍作更改才能获得常规的bitmapData。
另一种方法是使用flash cs6&gt;右键单击库中的movieclip并选择“convert to sprtiesheet”