タイル張りの練習
画像をタイル張りするやつを作ってみたいと思います
タイル張りというのはいわゆる2Dゲームの背景のように
正方形の小さい画像をびっしりならべて表示するものです
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);
}
}
}
}