|
サンプルの作成などに使用した ParaDraw のバージョンは Ver.0.3a4, Suzuka のバージョンは Ver. 0.8.0.0 [RichEdit版] です。
一見すごそうな ActionScript を使用してそうに見えるでしょう!(でもない?)。
ところがドッコイ,そうでもありません。
このサンプルは,イベントハンドラメソッド の1つの簡単な使用例です。
スクリプトも _root の フレーム1 に,たったこれ↓だけです。
// 座標指定用 crd_mc をフレーム2でストップ
_root.crd_mc.gotoAndStop(2);
// スピードの設定
spd = 1/10;
// 1フレーム進む時間毎に随時実行
_root.pct_mc.onEnterFrame = function() {
for (i=0; i<=77; i++) {
// pct_mc内の dot0〜77 の座標を
// crd_mc内の dot0〜77 の座標に徐々に近付ける
this["dot"+i]._x += (_root.crd_mc["dot"+i]._x-this["dot"+i]._x)*spd;
this["dot"+i]._y += (_root.crd_mc["dot"+i]._y-this["dot"+i]._y)*spd;
}
};
for (i=0; i<=3; i++) {
// 各ボタンに固有の値 n を設定
_root["btn"+i].n = i;
// 各ボタンロールオーバー時の動作定義
_root["btn"+i].onRollOver = function() {
_root.crd_mc.gotoAndStop(this.n+2);
};
// 各ボタンロールアウト時の動作定義
_root["btn"+i].onRollOut = function() {
_root.crd_mc.gotoAndStop(1);
};
// 各ボタンドラッグアウト時の動作定義
_root["btn"+i].onDragOut = _root["btn"+i].onRollOut;
}
|
イベントハンドラメソッド のスクリプト例より単純です。
また,これ以外のスクリプトは一切どこにも使用していません。
スクリプトも簡単であれば原理も簡単です。
crd_mc というスプライト(MC)の中に dot0〜77 というスプライトをフレームごとに好きなように配置し,
crd_mc 内のフレームを行ったり来たりさせて,
pct_mc というスプライト(MC)内に配置した dot0〜77 というスプライトをその座標に近付ける。
というだけのものです。
_root のタイムラインは次のようになっています。

crd_mc というスプライトは,背景画像の下になっていて全く見えていない状態にしています。
見えている ドット は pct_mc 内に配置した dot0〜77 という 78個 のスプライトです。
pct_mc と crd_mc の中は次のようになっています。

pct_mc の中にも crd_mc の中にも,dot0〜77 という 78個 のスプライトが入っていて,crd_mc 内の各フレームには,表示させたいように dot0〜77 を配置しています。
そしてスクリプトでは,
// 1フレーム進む時間毎に随時実行
_root.pct_mc.onEnterFrame = function() { … };
によって,pct_mc の中の dot0〜77 を,crd_mc の中の dot0〜77 の座標にひたすら近付けています。
さらに各ボタン btn0〜3 にロールオーバーしたり,ロールアウトしたりすると,
crd_mc 内のタイムラインがそれぞれのボタンの指定フレームに行って止まるので,
pct_mc の中の dot0〜77 が近づく目標座標がその都度変わる。
というしくみです。
種を明かせば簡単なことですね(種を考えるのと工作は少し難しいかも...)。
なお,このサンプルでは crd_mc を pct_mc と同じ座標に重ねて置いていますが,各スプライト内の座標はそのスプライトの基準点を 0 としたローカルな相対座標であるため,同じフレームに(同時に)存在するという条件を崩さなければ,全く違う場所に配置してもかまいません。
また,背景画像によって crd_mc を隠すのではなく,crd_mc のアルファ(不透明度)を 0 にして見えなくしても良いですし,
_root.crd_mc._visible = false;
のようにして,非表示にしてもかまいません。
以上,イベントハンドラメソッド の1つの簡単な使用例と,MovieClip.gotoAndStop() の使い方例でした。
|