サーチ…


表示オブジェクトをビットマップデータに描画する

オブジェクトのビットマップコピーを作成するヘルパー関数。これは、ベクトルオブジェクト、テキストまたは複合ネストされた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番目の手法は、表示リストにたくさんのSpriteBitmapあり、それらが同じスプライトシートを共有している場合に使用できます。ここでは、ターゲットバッファは単一のオブジェクトではなく、各オブジェクトに独自のバッファがあるため、適切な戦略はビットマップのbitmapDataプロパティを操作することです。ただしこれを行う前に、スプライトシートを個々のフレームに分割する必要があります。

public class Stuff extends Bitmap {
    static var spriteSheet:Vector.<BitmapData>;
    function displayFrame(frame:int) {
        this.bitmapData=spriteSheet[frame]; 
    }
    // ...
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow