0

わかりましたので、これを使用してビットマップ画像を背景としてロードしようとしています:

screenBitmapData.copyPixels(tilesBitmapData,new Rectangle(sourceX,sourceY,tileSize,tileSize),new Point(destX,destY));
screenBitmap = new Bitmap(screenBitmapData);
addChild(screenBitmap);

これにより、タイル マップが正しく読み込まれ、画面に表示されます。

ここで、キャラクターとして使用される別の画像を追加し、それを表示するフレームにキャラクターの動きを含めて、次のように画像を表示します。

screenBitmapData.copyPixels(playerSheetBitmapData, new Rectangle(currentSpriteColumn * CHAR_SPRITE_WIDTH, currentSpriteRow * CHAR_SPRITE_HEIGHT, CHAR_SPRITE_WIDTH, CHAR_SPRITE_HEIGHT), new Point(xPos, yPos), null, null,true);

キャラクター画像にアルファチャンネルを設定しました。これは、マップを移動したときの結果です。

http://snag.gy/L2uuR.jpg

ご覧のとおり、背景画像は更新されません。そして、私は単にこれを行う方法を知りません。私はフラッシュと as3 を使ったばかりで、それを機能させるために何日も試みてきました。スプライトを再度描画する前に、copypixelまたは背景を再描画することに関係があることはわかっています...何かアイデアはありますか?

4

1 に答える 1

1

シーン全体を再描画する必要があります。現時点で行っているのは、前のドローの結果の上にプレーヤーを描画することだけです。

あなたのケースで必要なのは、キャラクターを描く前に各フレームの背景全体を描くことだけです。次のようになります。

function renderScene():void
{
    // Draw the background, which will replace all the current graphics
    // on the Bitmap.
    screenBitmapData.copyPixels(tilesBitmapData,new Rectangle(sourceX,sourceY,tileSize,tileSize),new Point(destX,destY));

    // Then draw the player.
    screenBitmapData.copyPixels(playerSheetBitmapData, new Rectangle(currentSpriteColumn * CHAR_SPRITE_WIDTH, currentSpriteRow * CHAR_SPRITE_HEIGHT, CHAR_SPRITE_WIDTH, CHAR_SPRITE_HEIGHT), new Point(xPos, yPos), null, null,true);
}

ただし、ビットマップを実際にクリアするには、 を使用fillRect()して色 (黒など) で塗りつぶすことができます。

// Fill the Bitmap with black.
screenBitmapData.fillRect( screenBitmapData.rect, 0x000000 );
于 2013-04-04T04:24:28.153 に答える