3

mySprite.pngという画像があります。画像は、32x32ピクセルのスプライトの5x5グリッドです。この画像はプロジェクトのライブラリに読み込まれています。

クラス内にrender()関数があるとすると、このクラスは、このスプライトシートリソースから単一のスプライトとして自分自身をどのように描画しますか?

4

2 に答える 2

10

簡単に言うと、BitmapData.copyPixels()を使用して、ソーススプライトシートから実際に画面に表示されているディスプレイスプライトに小さなセクションのみをコピーする必要があります。

何かのようなもの:

private function DrawSpriteIndex( displayBitmap:Bitmap, spriteSheet:Bitmap, spriteIndex:int ):void {
  var spriteW:int = 32;
  var spriteH:int = 32;
  var sheetW:int = 5;

  displayBitmap.bitmapData.copyPixels(spriteSheet.bitmapData, 
                                       new Rectangle( (spriteIndex % sheetW) * spriteW, Math.floor(spriteIndex / sheetW) * spriteH, 32, 32),
                                       new Point(0,0)
                                      );
}

あなたはこれらのリンクが役に立つと思うかもしれません-私がこれを学んでいたときにそれらは私を助けました:

于 2009-07-28T17:51:33.867 に答える
1

別の可能な方法は、シートの上に32x32のマスクを置き、シートを動かすだけです。

これは(擬似コード)のように機能します:

var spriteMask:Sprite = new Sprite();
spriteMask.graphics.drawRect(0,0,32,32);
spriteSheetContainer.mask = spriteMask;

function render():void {    // this function is on the container of the sprite sheet (spriteSheetContainer in this example)
    // run offsetX & Y iteration logic.  I would assume something that uses a frame counter, modulus, and the sprite layout grid dimensions
    _spriteSheet.x = offsetX;    // move the sprite around under the mask
    _spriteSheet.y = offsetY;
}

スプライトシート自体ではなく、スプライトシートのコンテナにマスクを配置することが重要です。これにより、マスクから独立してスプライトシートを移動できます。

于 2009-07-28T18:20:03.093 に答える