▽画像の一部を表示する▽
Flashゲームを作成する際、
キャラクタの歩行パターンなどをまとめた画像ファイルを利用しています。
画像ファイルの一部分だけ表示したいのに
画像ファイルをそのままstageに追加するとすべて表示されてしまいます。
今回はそれを解決するためのサンプルコードを公開します。
追記:ActionScript簡易ゲームライブラリを公開しました。
グラフィック系以外にも効果音、BGMも扱えるライブラリです。
キャラクタの歩行パターンなどをまとめた画像ファイルを利用しています。
画像ファイルの一部分だけ表示したいのに
画像ファイルをそのまま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);
}
}
}▽改変履歴▽