このFlash講座1234は,flashソフトを用いてflashアニメなどの制作をスクリプトを通して無料で公開したものです。![]() |
||
| FLASH講座 ーアクションスクリプトの実践的事始めー 活用編 (12) 画像枚数読取り型スライドショー太陽 |
||
| 今回のスライドショーは、自動再生と次へ・戻るのボタンイベント再生を組み合わせたベーシックなものです。しかし、再生する画像を画像フォルダに連番で入れておけば、その枚数をカウントして再生するタイプです。 したがって、サーバーにアップロードした後でも、swfファイルの更新をすることなく、枚数にとらわれず入れ替えたり、増減させたりすることが可能になるのです。 また、画像表示のタイミングで、ランダム八方向から画像がスライドして登場するするような趣向を施しています。 |
||
| SAMPLE | ||
| ステージの準備 | ||
| ●w520、h400、24fpsのステージを設定し、背景色を黒とする。 ●画面左下部にスライド番号(current_num)、総スライド数(total_num)を表示するダイナミックテキストボックスを設置する(カッコ内はインスタンス名) ●画面中央下部に戻るボタン(back_btn)、次へボタン(forward_btn)を左右に、中央に、自動再生用のplayボタンとstopボタンを重ね合わせて配置する(stopが上) ●画面右下部にコンポーネントのComboBoxからドラッグ&ドロップで配置し、プロパティーでmyComboと名づけ、サイズを40*22とする。 さらにパラメーターでラベルに4,2,3,5,6,7と記入する(自動再生間隔秒の設定用、初期値4) ●画面に表示画面の大きさの矩形を描き(黒色、ここでは450*320)、シンボルに変換(mask)、画面から削除する ●本swf ファイルと同じフォルダにimgという名のフォルダを作成、画像を格納する(ここではpic1,,,,pic12の連番) 本稿で使用させていただいた写真は、荒木さんのサイトで公開されている写真の一部です。 とにかく素晴らしいです。 是非のぞいてみてください。 アドレスは、http://www15.ocn.ne.jp/~araki-lf/ ●画面レイアウト ![]() 写真(外部ファイル)、マスク(ライブラリ)はスクリプトで配置する。 マスクの領域だけの写真部分が表示される 写真がロードされて表示される時点で、写真は、乱数発生される 1から8までの数字に応じて(八方向のいずれかに向かって)、 15px移動する |
||
| スクリプト | ||
var n = 0;
var s = 0;
_forcusrect = false;
attachMovie("mask", "mask_mc", 0);
mask_mc._x = mask_mc._y=28;
load_mc = createEmptyMovieClip("load_mc", -1);
var mcLoader:MovieClipLoader = new MovieClipLoader();
var oListener = new Object();
function searchTotal() {
s++;
$jpg = "img/pic"+s+".jpg";
mcLoader.loadClip($jpg, load_mc);
load_mc._alpha = 0;
oListener.onLoadError = function() {
total = s;
clearInterval(sID);
n = 0;
autoExchange();
};
mcLoader.addListener(oListener);
}
function p_load(n) {
$jpg = "img/pic"+n+".jpg";
mcLoader.loadClip($jpg, load_mc);
p_direction(n);
load_mc._x = 10;
load_mc._y = 10;
load_mc._alpha = 0;
_root.onEnterFrame = function() {
load_mc.setMask(mask_mc);
load_mc._alpha += (100-load_mc._alpha)/40;
load_mc._x += (targetx-load_mc._x)/40;
load_mc._y += (targety-load_mc._y)/40;
current_num.text = n;
total_num.text = total-1;
}
}
function autoExchange() {
if (n>=total-1) {
n = 1;
p_load(n);
} else {
n++;
p_load(n);
}
}
function p_direction(n) {
dir = Math.floor(Math.random()*8)+1;
x0 = y0=10;
xm = ym=25;
switch (dir) {
case 1 :
targetx = xm;
targety = ym;
break;
case 2 :
targetx = xm;
targety = y0;
break;
case 3 :
targetx = xm;
targety = 2*y0-ym;
break;
case 4 :
targetx = x0;
targety = 2*y0-ym;
break;
case 5 :
targetx = 2*x0-xm;
targety = 2*y0-ym;
break;
case 6 :
targetx = 2*x0-xm;
targety = y0;
break;
case 7 :
targetx = 2*x0-xm;
targety = ym;
break;
case 8 :
targetx = x0;
targety = ym;
}
}
play_btn.onRelease = function() {
flag=0;
forcusManager.setFocus(play_btn);
clearInterval(pID);
autoExchange();
pID = setInterval(autoExchange, myCombo.value*1000);
mx.behaviors.DepthControl.sendBackward(this);
};
stop_btn.onRelease = function() {
flag=1;
forcusManager.setFocus(stop_btn);
clearInterval(pID);
mx.behaviors.DepthControl.sendBackward(this);
};
f_btn.onRelease = function() {
forcusManager.setFocus(f_btn);
autoExchange();
};
b_btn.onRelease = function() {
forcusManager.setFocus(b_btn);
if (n<2) {
n = total-1;
} else {
n--;
}
p_load(n);
};
sID = setInterval(searchTotal, 70);
pID = setInterval(autoExchange, 4000);
myComboBoxListener = new Object();
myComboBoxListener.change = function() {
clearInterval(pID);
if (flag!==1) {
pID = setInterval(autoExchange, myCombo.value*1000);
}
};
myCombo.addEventListener("change", myComboBoxListener);
|
変数nの初期値 変数sの初期値 フォーカスが当たったときの四角非表示 マスクをステージに配置 マスクの配置座標 画像を読み込むムービークリップの作成 MovieClipLoaderの作成 リスナー(監視オブジェクト)の作成 フォルダ(img)内の画像枚数を調べる関数 関数が呼び出される度にsに1を足す 画像のファイル名 load_mcに画像をロードする アルファ値を0に ロードエラーが生じたら(画像がない) そのときのsをtotalとする(実枚数は-1) Intervalの解除 autoExchange関数を実施 リスナーの設定 画像をロードする関数 画像ファイル名 load_mcに画像をロードする 移動先の座標を取得 画像初期x座標 画像初期y座標 初期アルファを0に フレームアクション load_mcにマスクをかける アルファ値を100に load_mc(画像表示mc)をtargetxに targetyに 現在のn(画像番号)を表示 トータル枚数を表示 自動再生画像切り替え指示関数 存在枚数を超えたら nを1に ロード開始 存在枚数内だったら nに1を足す ロード開始 画像移動先座標を決める関数 1から8までの乱数発生 dirに応じて移動先を決める (targetx、targety) playボタンが押されたら flag を0に playボタンにフォーカスを当てる 注) pIDをクリヤー 関数 autoExchange へ コンボボックス指定値ごとにautoExchange を実施 ボタンを背後に stopボタンが押されたら flagを1に stopボタンにフォーカスを当てる 注) pID を解除 ボタンを背後に forwardbボタンが押されたら forwardボタンにフォーカスを当てる 注) autoExchange を実施 backボタンが押されたら backボタンにフォーカスを当てる 注) nが2より小さくなったら n をtotal-1に(totalは存在枚数より1多い) そうでなかったら nから1を引く p_loadを実施 searchTotal を70ミリ秒ごとに実施 autoExchange を4秒ごとに実施 リスナーオブジェクトの作成 データが変わったときに実施 pIDのクリヤー もし flag が1でなければ(stopボタンが押されてなかったら) comboボックスの数値(間隔)でautoExchangeを実施 リスナーの設定 |
|
| 注)ComboBoxを使った後、ボタン類の連続クリックが効かなくなるのを回避するため 詳しくは、こちらを参照のこと |
||
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
|
||
| HOME Flash講座総リスト アクションスクリプトの実践的事始め-活用編(13) | ||
![]()