1

スプライトをビットマップに変換しようとしています (最初にスプライトから BitMapData を作成します) が、何をしてもビットマップが表示されないようです。

public class Platform 
{
    private var startingPointX:Number;
    private var startingPointY:Number;
    private var length:Number;
    private var platformLine:Sprite;
    private var color:uint;

    private var platformBitmap:Bitmap;
    private var platformBitmapData:BitmapData;

    public function Platform(stage:Stage, startX:Number, startY:Number, len:Number, theColor:uint) 
    {
        startingPointX = startX;
        startingPointY = startY;
        length = len;
        color = theColor;

        platformLine = new Sprite();
        platformLine.graphics.lineStyle(5, color);
        platformLine.graphics.moveTo(startingPointX, startingPointY);
        platformLine.graphics.lineTo(startingPointX + length, startingPointY);          
        platformBitmapData = new BitmapData(platformLine.width, platformLine.height);
        platformBitmapData.draw(platformLine);

        platformBitmap = new Bitmap(platformBitmapData);

        //stage.addChild(platformLine);
        stage.addChild(platformBitmap);
    }

}

はい、すべてインポートしました。すべてがエラーなしで実行されます。

スプライト自体 (上記で platformLine と呼びます) を表示できます (上記のコメント行を参照)。ただし、stage.addChild(platformBitmap) はステージ上に何も表示しません。beginFill メソッドと endFill メソッドを使用しても、何も変わらないようです。

スプライトをビットマップに変換する方法についてさまざまなサイトをチェックしましたが、BitmapData の draw メソッドを使用するように言われています。

だから私の質問は...なぜplatformBitmapが私にとって「空白」になってしまうのですか?

4

2 に答える 2

1

.draw()の登録ポイントからグラフィックスのキャプチャを開始しますplatformLinewidthのコンストラクターを指定する限り、グラフィックスを水平方向にキャプチャし続けBitmapDataますheight

あなたのコードを見ると、あなたplatformLineは常に0,0. スプライト自体を必要な場所に移動する代わりに、それを使用して、そのスプライト内の必要な場所にグラフィックスの描画を開始しているようstartXですstartY

ここで問題が発生します。ここで最終的に発生する可能性があるのは、レジストレーション ポイントから 40 ピクセル離れるまでグラフィックが開始されないスプライトです。この例では、これらのグラフィックは 20 ピクセル x 20 ピクセルです。つまり、指定する幅と高さBitmapDataも 20 です。スプライトの左上から 20x20 の領域にグラフィックを描画し始めますが、実際のグラフィックはありません。まで描画するグラフィック40,40。結果は空白のビットマップです。

これを回避するために、BitmapData.draw()を受け入れるパラメーター (5 番目のパラメーター) がありますRectangle。この Rectangle を使用して、スプライトでグラフィックをコピーする領域を定義できます。

于 2013-06-12T07:05:36.010 に答える