▽画像の一部を表示する▽
Flashゲームを作成する際、
キャラクタの歩行パターンなどをまとめた画像ファイルを利用しています。
画像ファイルの一部分だけ表示したいのに
画像ファイルをそのままstageに追加するとすべて表示されてしまいます。

今回はそれを解決するためのサンプルコードを公開します。

追記:ActionScript簡易ゲームライブラリを公開しました。
グラフィック系以外にも効果音、BGMも扱えるライブラリです。

package 
{
 import flash.display.Sprite;
 import flash.events.Event;
 
 import flash.display.Bitmap;
 import flash.display.BitmapData;

 import flash.geom.Point;
 import flash.geom.Rectangle;

 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.events.*;
 import flash.net.*;
 
 /**
  * ビットマップサンプル
  * @author kazenetu
  */
 public class Main extends Sprite 
 {
  //ロードした画像
  private var bitmapData:BitmapData = null;
  
  //スクリーン表示用Bitmap
  private var screen:Bitmap = null;
  
  /**
   * エントリメソッド
   */
  public function Main():void 
  {
   if (stage) init();
   else addEventListener(Event.ADDED_TO_STAGE, init);
  }

  /**
   * 初期化処理
   */
  private function init(e:Event = null):void 
  {
   removeEventListener(Event.ADDED_TO_STAGE, init);
   // entry point
   //画像ファイルを読み込む
   var loader:Loader = new Loader();
   loader.load(new URLRequest("dj.png"));
   loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplate);
   
   //スクリーン表示用Bitmapを作成(Flash画面全体を覆うサイズ)、ステージに追加
   var srcBmpData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x00000000);
   this.screen = new Bitmap(srcBmpData);
   stage.addChild(screen);
   
   //フレーム処理イベントを設定
   stage.addEventListener(Event.ENTER_FRAME, onEnter);
  }
  
  /**
   * フレーム処理
   */
  private function onEnter(e:Event):void {
   //スクリーンをクリア
   this.screen.bitmapData.fillRect(new Rectangle(0, 0, this.screen.width, this.screen.height), 0x00000000);
   
   //画像ファイルが読み込まれていれば、一部分を描画する
   if (this.bitmapData != null) {
    var srcX:int = 0; //画像ファイルの左上位置X
    var srcY:int = 32;//画像ファイルの左上位置Y
    var width:int = 32;//画像ファイルの幅
    var height:int = 32;//画像ファイルの高さ
    var x:int = 100;//スクリーンへの描画位置X
    var y:int = 100;//スクリーンへの描画位置Y
    
    //スクリーンに実際に描画する
    this.screen.bitmapData.copyPixels(
     this.bitmapData
     ,new Rectangle(srcX, srcY, width, height)
     ,new Point(x, y)
    );
   }
  }

  /**
   * 画像ファイルのロード完了イベント
   */
  private function onLoadComplate(event:Event) :void {
   var loader:Loader = (LoaderInfo)(event.target as LoaderInfo).loader;
   this.bitmapData = new BitmapData(loader.content.width, loader.content.height, true, 0x00000000);
   this.bitmapData.draw(loader.content);
  }
 }
}
▽改変履歴▽
2011/05/10
ActionScript簡易ゲームライブラリへのリンクを追加
2011/05/09
・フレーム処理でスクリーンのクリアが抜けていたので追記
2011/05/08
・新規作成