|
|
<ステージの準備>
●340*490、背景色黒(好みで可)、36fpsのステージを設定しする
(ステージの大きさは、用意する画像の大きさによる)
●Flashファイルと同一のディレクトリーに images というフォルダを作成し、その中に、pic1.jpg,pic2.jpg,,,pic5.jpg を格納する
(ファイル名、画像の枚数、格納場所は任意でよいが、SAMPLEスクリプトの設定(記述)を正確に変更すること)
なお、ここで用いた画像は、
サイト「瑠璃月華(るりげっか)」
http://www.geocities.jp/lapislazuli_since2002/
のギャラリーから許可をいただいているものです。
素晴らしい作品満載のサイトですので、訪問・閲覧をお勧めします。 |
import flash.display.*;
import flash.geom.*;
var holder_mc:Array = new Array();
var part:Array = new Array();
var x0 = 20;
var y0 = 20;
var divx = 20;//x方向分割数
var divy = 30;//y方向分割数
picTotal = 5;//画像(写真)の数
num = 1;
//一枚目の画像の読み込みと表示、画像切り替え関数(imageExchange)の呼び出し
holder_mc[num] = createEmptyMovieClip("holder_mc"+num, picTotal+1-num);
loader_2 = new MovieClipLoader();
loader_2.loadClip("images/pic"+num+".jpg",holder_mc[num]);
holder_mc[num]._x = holder_mc[num]._y=x0;
imageExchange();
//画像切り替え関数(setIntervalによって繰り返される)
function imageExchange() {
//表示されている画像の下層に次の番号の画像を取り込む
if (num == picTotal) {
num2 = 1;
} else {
num2 = num+1;
}
holder_mc[num2] = createEmptyMovieClip("holder_mc"+num2, picTotal+1-num2);
holder_mc[num2]._x = x0; holder_mc[num2]._y = y0;
var loadListener:Object = new Object();//リスナーオブジェクトの定義
loader_1 = new MovieClipLoader();
loader_1.addListener(loadListener);
loader_1.loadClip("images/pic"+num2+".jpg",holder_mc[num2]);
//下層の画像のロードが完了して使用できる状態になると呼び出される関数
loadListener.onLoadInit = function() {
//holder_mcと同じ大きさで透明なBitmapDataを作る
originalPic = new BitmapData(holder_mc[num]._width, holder_mc[num]._height, true, 0x00FFFFFF);
//holder_mc[num]に読み込まれている画像をBitmapDataとしてoriginalPicに格納
originalPic.draw(holder_mc[num]);
//originalPicのデータをsliceする四角形の幅と高さ
var divx_width = originalPic.width/divx;
var divy_height = originalPic.height/divy;
//画像をdivx*divyの数に切り分けてムービークリップとして元の位置に配置する
for (i=1; i<=divx*divy; i++) {
partMc = createEmptyMovieClip("mc"+i, 10+i);
partMc._x = x0+(i-1)%divx*divx_width;
partMc._y = y0+Math.floor((i-1)/divx)*divy_height;
var tx = -(i-1)%divx*divx_width;
var ty = -Math.floor((i-1)/divx)*divy_height;
var partPic:BitmapData = partition(originalPic, tx, ty, divx_width, divy_height);
partMc.attachBitmap(partPic,10);
}
holder_mc[num].removeMovieClip();//用済みのムービークリップを削除
originalPic.dispose();//用済みのBitmapDataを削除
disappear();//関数disappearへ
if (num<5) {
num++;
} else {
num = 1;
}
};
}
imgID = setInterval(imageExchange, 6000);//関数imageExchangeを6秒毎に繰り返して実施
//divx*divy(ここでは600)個のsliceを位置ランダムに5ミリ秒毎に1個1個アルファー値を0にする(消失)
function disappear() {
generateRandomInt(divx*divy);
for (r=1; r<=divx*divy; r++) {
k = parseInt(int_b[r-1])+1;
part[r] = _root["mc"+k];
part[r].delay = 5*(r-1);
disappr(part[r],part[r].delay);
}
}
function disappr(p, delay) {
delay += 800;
p.interval = function() {
clearInterval(p.ID);
p.onEnterFrame = function() {
this._alpha += (0-this._alpha)/3;
};
};
p.ID = setInterval(p, "interval", delay);
}
//画像を指定どおりに切り分ける関数
function partition(oPic, x, y, w, h):BitmapData {
var clipRect:Rectangle = new Rectangle(0, 0, w, h);
var clipMatrix:Matrix = new Matrix();
clipMatrix.translate(x,y);
var clipPic:BitmapData = new BitmapData(w, h);
clipPic.draw(oPic,clipMatrix,new ColorTransform(),null,clipRect);
return clipPic;
}
//指定範囲内の重複しない整数を発生させ配列で返す関数
function generateRandomInt(maxN):Array { int_a = []; int_b = []; for (i=0; i<maxN; i++) { int_a[i] = i; } j = 0; a_length = int_a.length; while (a_length) { int_r = Math.floor(Math.random()*(maxN-j)); int_b[j] = int_a.splice(int_r, 1); j++; a_length = int_a.length; } return int_b; } |