ActionScript 3
ビットマップの描画
サーチ…
表示オブジェクトをビットマップデータに描画する
オブジェクトのビットマップコピーを作成するヘルパー関数。これは、ベクトルオブジェクト、テキストまたは複合ネストされたSpriteを平坦化ビットマップに変換するために使用できます。
function makeBitmapCopy(displayObj:IBitmapDrawable, transparent:Boolean = false, bgColor:uint = 0x00000000, smooth:Boolean = true):Bitmap {
//create an empty bitmap data that matches the width and height of the object you wish to draw
var bmd:BitmapData = new BitmapData(displayObj.width, displayObj.height, transparent, bgColor);
//draw the object to the bitmap data
bmd.draw(displayObj, null, null, null, null, smooth);
//assign that bitmap data to a bitmap object
var bmp:Bitmap = new Bitmap(bmd, "auto", smooth);
return bmp;
}
使用法:
var txt:TextField = new TextField();
txt.text = "Hello There";
var bitmap:Bitmap = makeBitmapCopy(txt, true); //second param true to keep transparency
addChild(bitmap);
登録ポイントの任意の座標を持つ表示オブジェクトを描画する
public function drawDisplayObjectUsingBounds(source:DisplayObject):BitmapData {
var bitmapData:BitmapData;//declare a BitmapData
var bounds:Rectangle = source.getBounds(source);//get the source object actual size
//round bounds to integer pixel values (to aviod 1px stripes left off)
bounds = new Rectangle(Math.floor(bounds.x), Math.floor(bounds.y), Math.ceil(bounds.width), Math.ceil(bounds.height));
//to avoid Invalid BitmapData error which occures if width or height is 0
//(ArgumentError: Error #2015)
if((bounds.width>0) && (bounds.height>0)){
//create a BitmapData
bitmapData = new BitmapData(bounds.width, bounds.height, true, 0x00000000);
var matrix:Matrix = new Matrix();//create a transform matrix
//translate if to fit the upper-left corner of the source
matrix.translate(-bounds.x, -bounds.y);
bitmapData.draw(source, matrix);//draw the source
return bitmapData;//return the result (exit point)
}
//if no result is created - return an empty BitmapData
return new BitmapData(1, 1, true, 0x00000000);
}
副作用: getBounds()
が有効な値を返すためには、オブジェクトはステージアクセスを少なくとも1回持たなければなりません。そうでなければ値は偽です。渡されたsource
にステージがあることを保証するためのコードを追加することができます。そうでない場合はステージに追加してから再度削除することができます。
スプライトシートをアニメーション化する
定義によるスプライトシートは、特定のアニメーションを含むビットマップです。古いゲームではグリッドタイプのスプライトシートを使用しています。つまり、すべてのフレームが等しい領域を占め、枠が矩形を形成するように揃えられています。その後、ビットマップサイズを最小限に抑えるために、スプライトシートは、各フレームを含む矩形の周りの余分な空白を削除することによって「パック」され始めますが、各フレームはコピー操作を簡略化するための矩形です。
スプライトシートをアニメーション化するには、2つの手法を使用できます。まず、 BitmapData.copyPixels()
を使用して、スプライトシートの特定の領域を表示されたBitmap
にコピーし、アニメーション化された文字を生成することができます。このアプローチは、画像全体をホストする表示された1つのBitmap
を使用する方が優れています。
var spriteSheet:BitmapData;
var frames:Vector.<Rectangle>; // regions of spriteSheet that represent frames
function displayFrameAt(frame:int,buffer:BitmapData,position:Point):void {
buffer.copyPixels(spriteSheet,frames[frame],position,null,null,true);
}
2番目の手法は、表示リストにたくさんのSprite
やBitmap
あり、それらが同じスプライトシートを共有している場合に使用できます。ここでは、ターゲットバッファは単一のオブジェクトではなく、各オブジェクトに独自のバッファがあるため、適切な戦略はビットマップのbitmapData
プロパティを操作することです。ただしこれを行う前に、スプライトシートを個々のフレームに分割する必要があります。
public class Stuff extends Bitmap {
static var spriteSheet:Vector.<BitmapData>;
function displayFrame(frame:int) {
this.bitmapData=spriteSheet[frame];
}
// ...
}