▽画像の一部を表示する▽
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); } } }
▽改変履歴▽