Bitmapのタイリング

| comment (0) | trackback (0)

ライブラリに読み込まれたビットマップをタイリングして配置する方法を紹介します。

まず、ライブラリにあるビットマップを Actionscript で扱えるようにクラス設定をします。
[ライブラリ]のメニューから[プロパティ]を選択し、[プロパティ]ダイアログボックスを開き[リンケージ」オプションを表示します。
「ActionScriptに書き出し」にチェックをつけ、「クラス」のテキストボックスがアクティブになりますので、任意のクラス名を入力します。
ここでは、ビットマップに対して、クラス名を「tile」と設定したとします。 この tile クラスは BitmapData クラスのサブクラスとなります。


次のコードは、 tile クラスのインスタンスを生成します。 引数としてビットマップデータの幅と高さを渡すのですが、0 で設定しておいて問題はありません。

var bmd:BitmapData = new tile(0, 0);

このままビットマップを表示するのであればBitmapData クラスのインスタンスを引数に Bitmap クラスのインスタンスを生成し addChild() メソッドを実行すればよいのですが、タイリングで塗りつぶすために Graphics クラスの beginBitmapFill() メソッドを使用します。

Graphics.beginBitmapFill() メソッドは、描画領域をビットマップイメージで塗りつぶします。

beginBitmapFill(bitmap:BitmapData, matrix:Matrix = null, repeat:Boolean = true, smooth:Boolean = false):void
パラメータ:
  bitmap   表示されるビットマップイメージ
  matrix   (default = null) ― flash.geom.Matrix クラスのマトリックスオブジェクト
  repeat   (default = true) ― true の場合、ビットマップイメージが一定のパターンでタイル状に表示されます。false の場合、ビットマップイメージは繰り返されません。

下記のコードは、Sprite クラスのインスタンスを生成して、指定の領域をビットマップで塗りつぶしています。Graphics クラスは、Sprite クラスの graphics プロパティによってアクセスします。

var bmd:BitmapData = new tile(0, 0);

var sp:Sprite = new Sprite();
sp.graphics.beginBitmapFill(bmd);
sp.graphics.drawRect(0,0,640,480);
sp.graphics.endFill();

addChild(sp);

下記のコードは、指定のムービークリップを領域の範囲を指定してビットマップで塗りつぶすクラスです。このクラスは、引数として、「ビットマップで塗りつぶしたいムービークリップ」、「塗りつぶす領域の範囲」、リンケージで設定したビットマップの「クラス名」を渡します。


BitmapTiling クラス

package {
	import flash.display.*;
	import flash.geom.Matrix;
	import flash.utils.getDefinitionByName;

	public class BitmapTiling extends Sprite {
		function BitmapTiling(container:DisplayObjectContainer,w:Number,h:Number,className:String) {
			var myClass:Class = Class(getDefinitionByName(className));
			var bmd:BitmapData = new myClass(0,0);

			var sp:Sprite = new Sprite();
			sp.graphics.beginBitmapFill(bmd);
			sp.graphics.drawRect(0,0,w,h);
			sp.graphics.endFill();

			container.addChild(sp);
		}
	}
}

BitmapTiling クラスを実行するために、fla ファイルのフレームアクションに次のコードを記述します。
MovieClip のインスタンス mc を「tile」クラスを指定したビットマップで、幅 200 ピクセル、高さ100 ピクセルの範囲を塗りつぶします。

var myBitmapTiling:BitmapTiling = new BitmapTiling(mc, 200, 100, "tile");

引数で渡されたクラス名は、etDefinitionByName() 関数を使ってクラスオブジェクトへの参照を取得します。

getDefinitionByName(name:String):Object
パラメータ:
  name:String   クラス名
戻り値:
  Object   name パラメータで指定したクラスのクラスオブジェクトへの参照を返します。

次のクラスは、外部のビットマップ画像を読み込みタイリングするクラスです。


LoadBitmapTiling クラス

package {
	import flash.display.*;
	import flash.net.URLRequest;
	import flash.events.*;
	import flash.geom.Matrix;

	public class LoadBitmapTiling extends Sprite {
		private var container:DisplayObjectContainer;
		private var w:Number;
		private var h:Number;

		function LoadBitmapTiling(container:DisplayObjectContainer,w:Number,h:Number,url:String) {
			this.container = container;
			this.w = w;
			this.h = h;

			var loader:Loader = new Loader();
			loader.load(new URLRequest(url));
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
		}

		private function onComplete(event:Event):void {
			var bmd:BitmapData = new BitmapData(event.target.loader.width,event.target.loader.height,false);
			bmd.draw(event.target.loader, new Matrix());

			var sp:Sprite = new Sprite();
			sp.graphics.beginBitmapFill(bmd);
			sp.graphics.drawRect(0, 0, w, h);
			sp.graphics.endFill();

			container.addChild(sp);
		}
	}
}

fla ファイルのフレームアクションに次のコードを記述します。

var myLoadBitmapTiling:LoadBitmapTiling = new LoadBitmapTiling(mc, 200, 100, "tile.jpg");

trackback (0)

trackback URL: http://gelsol.sub.jp/core/mt-tb.cgi/86

Post your comment