MatrixクラスとBitmapDataクラスを利用して、こんなのつくってみた。
あんまり見すぎると気持ち悪くなるので注意。
【製作過程】
swfファイル(flaファイル)と同階層に「icon.jpg」を用意。
以下のコードを、タイムラインの弟1フレームに記述。
![]()
icon.jpg
import flash.display.BitmapData;
import flash.geom.Matrix;
//キャプチャ用MCを生成
var load_mc:MovieClip=this.createEmptyMovieClip("load_mc",1);
//MovieClipLoaderインスタンスを生成
var mcl:MovieClipLoader=new MovieClipLoader();
//リスナーオブジェクトを生成
var obj:Object=new Object();
//読み込み終了後の処理
obj.onLoadInit=function():Void{
var bmp:BitmapData=new BitmapData(load_mc._width,load_mc._height,true,0x00FFFFFF);
//「icon.jpg」を読み込んだ「load_mc」をBitmapDataインスタンスにキャプチャ
bmp.draw(load_mc);
//キャプチャ用MCを削除
load_mc.removeMovieClip();
var angle:Number=0;
_root.onEnterFrame=function():Void{
angle++;
if(angle>=360){angle=0;}
var matrix:Matrix=new Matrix();
//マトリックス回転
matrix.rotate(Math.PI/180*angle);
//マトリックス傾斜
matrix.b=Math.tan(Math.PI/180*angle);
matrix.c=Math.tan(Math.PI/180*angle);
var view_mc:MovieClip=this.createEmptyMovieClip("view_mc",2);
view_mc.beginBitmapFill(bmp,matrix,true,true);
view_mc.moveTo(0,0);
view_mc.lineTo(0,300);
view_mc.lineTo(300,300);
view_mc.lineTo(300,0);
view_mc.lineTo(0,0);
view_mc.endFill();
}
}
//リスナーオブジェクトをMovieClipLoaderインスタンスに登録
mcl.addListener(obj);
//MovieClipLoaderインスタンスにロード
mcl.loadClip("icon.jpg",load_mc);
【製作のポイント】
外部ファイルをBitmapDataに直接読み込ませることはできないので、一旦ムービークリップに読み込ませ、それをキャプチャ(BitmapData.draw(MC))してBitmapDataに変換している。
赤字で示した「beginbitmapFill」はムービークリップのメソッドで、描画領域をビットマップイメージで塗りつぶす(タイル状に配置する)。
beginBitmapFill (MovieClip.beginBitmapFill メソッド)
public beginBitmapFill(bmp: BitmapData , [matrix: Matrix ], [repeat: Boolean ], [smoothing: Boolean ]) : Void

コメントする