タイル張りの練習

by nishink
画像をタイル張りするやつを作ってみたいと思います
タイル張りというのはいわゆる2Dゲームの背景のように
正方形の小さい画像をびっしりならべて表示するものです
♥0 | Line 43 | Modified 2010-04-25 12:45:26 | MIT License | (replaced)
play

Related images

ActionScript3 source code

/**
 * Copyright nishink ( http://wonderfl.net/user/nishink )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/fFDS
 */

// 画像をタイル張りするやつを作ってみたいと思います
// タイル張りというのはいわゆる2Dゲームの背景のように
// 正方形の小さい画像をびっしりならべて表示するものです
package {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.system.LoaderContext;
	import flash.geom.Rectangle;
	import flash.geom.Point;
	import flash.events.Event;
	import flash.text.TextField;
	public class FlashTest extends Sprite {
		// 画像のURL
		// 画像は「タイトル・タグ・ライセンスを編集」のところでアップロードできます
		// 「more」というリンクがあるのでクリックするとアップロードできます
		// 画像のURLはいったんアップロードしたあと編集を終了して
		// コードの一覧からこのコードを閲覧したとき
		// RELATED IMAGEというのがでるのでそこからURLを調べます
		private const IMAGE_URL:String = "http://assets.wonderfl.net/images/related_images/e/ec/ec4a/ec4aa232d9bd45f55dd728c3f2838c707c66355f";

		private var tile:Bitmap = new Bitmap();
		public function FlashTest() {
			// 画像を読み込みます
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			// new LoaderContext(true);は、読み込んだ画像を描画(BitmapData.draw)するのに必要
			// これを指定しないとSecurityError #2122になる
			loader.load(new URLRequest(IMAGE_URL), new LoaderContext(true));
			// 読み込んだ画像を表示
			addChild(tile);
		}
		// 読み込み完了を待つ
		private function onComplete(event:Event):void {
			// イベントリスナーの破棄
			loaderInfo.removeEventListener(Event.COMPLETE, onComplete);
			try {
				// 読み込んだ画像をBitmapとして扱います
				// 読み込み完了後でないとこのように扱うことができません
				var image : Bitmap = event.target.loader.content as Bitmap;
				// Bitmapを作ります
				var bd:BitmapData = new BitmapData(464, 464, false);
				// タイル張り
				var srcRect:Rectangle = new Rectangle(0, 0, 16, 16);
				var dstPos:Point = new Point();
				for (var y:int=0; y<464; y+=16) {
					for (var x:int=0; x<464; x+=16) {
						dstPos.x = x;
						dstPos.y = y;
						bd.copyPixels(image.bitmapData, srcRect, dstPos);
					}
				}
				tile.bitmapData = bd;
			} catch (e:Error) { // 例外処理
				var console:TextField = new TextField();
				console.appendText("\n " + e);
				addChild(console);
			}
		}

	}
}