- ベストアンサー
Flash8.0、ActionScript2.0で複数のムービークリップを時間差で表示する方法についての質問
- 複数のムービークリップをステージに時間差でバラバラの位置に表示したい。しかし、記述法が間違っているため、最初から表示されてしまう。
- 初心者なので、フラッシュを見よう見真似で作成しているが、正しい記述法を教えてほしい。
- Flash8.0、ActionScript2.0で効率的なムービークリップの表示方法があれば教えてほしい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> デフォルト時はmc1~5を非表示にしているつもりが、 > 最初から表示されてしまいます。 こんな感じにすれば良いのではないでしょうか↓。 ---------------------------- for(i=1;i<5;i++){ var mc = this["mc"+i]; mc.num = i; } mc.num._visible = false; mc.num._alpha = 0; ---------------------------- ↓変更↓ ---------------------------- for (i=1; i<=5; i++) { var mc = this["mc"+i]; mc._visible = false; mc._alpha = 0; } ---------------------------- ↓またはもっとシンプルに↓ ---------------------------- for (i=1; i<=5; i++) { this["mc"+i]._visible = false; this["mc"+i]._alpha = 0; } ---------------------------- > もっと効率的な方法がありましたら、 > ご教授いただければ幸いです。 上記部分以下のスクリプトについてですが, かなり意味不明な部分が含まれています。 その意味不明な部分を私なりに解釈すると, 次のようにすれば良いのではないかと思います↓。 ----------------------------------- //MCを時間差で任意の位置に表示 // 変数 t の初期値を 0 にする var t = 0; // カウント用の変数 cnt の初期値を 0 にする var cnt = 0; this.onEnterFrame = function() { // 変数 t に 1 を加算 t++; // もし t を 25 で割った余りが 0 であれば if (t%25 == 0) { // カウント用の変数 cnt に 1 を加算 cnt++; // mc1~mc5 を表示 this["mc"+cnt]._visible = true; this["mc"+cnt]._alpha = 100; // mc1~mc5 の y座標を設定 this["mc"+cnt]._y = 50*cnt; } // もし cnt の値が 5 になれば if (cnt == 5) { // この this.onEnterFrame を削除 delete this.onEnterFrame; } }; ----------------------------------- 書かれていらっしゃる if文 は次のようになっています。 if (t == 25) { … } if (t == 50) { … } if (t == 75) { … } … … ですから, 結局 t が 25 の倍数のときに何かを実行すればいいという規則性があります。 したがって, // もし t を 25 で割った余りが 0 であれば if (t%25 == 0) { … } という if文 にしています。 % はヘルプで調べてもらえばすぐにわかると思いますが,剰余演算子です。 C=A%B であると AをBで割った余りが C に代入されます。 また, 書かれていらっしゃる _y座標 は次のようになっています。 this._y = 50; this._y = 100; this._y = 150; ですから, 結局 _y座標は 50 ずつ増えている規則性があります。 したがって, t が 25 の倍数のときに別の変数 cnt を 1 ずつ加算しておいて, // mc1~5 の y座標を設定 this["mc"+cnt]._y = 50*cnt; のようにして,その変数cnt に 50 を掛けています。 このようにすると,質問にあるように, mc1 用の if文 mc2 用の if文 mc3 用の if文 mc4 用の if文 mc5 用の if文 と何度も同じような if文 を繰り返し書く必要はなくなって, 1つの if文 で済ませることができます。 = = = = = = = = = = = 仮に(もし仮にです),_y座標に規則がなくて, mc1._y = 20; mc2._y = 135; mc3._y = 18; mc4._y = 319; mc5._y = 50; のようにしたい場合。 この if文 1つの方法は崩壊するかというとそんなことはありません。 先に mc1 ~ mc5 のデータを配列などに用意しておけば, 同様に if文 は1つで済みます。 例えば, mc_yArr = [20, 135, 18, 319, 50]; というような座標データを入れた配列を先に, つまり this.onEnterFrame = function(){ } より上の行に用意しておいて, // mc1~mc5 の y座標を設定 this["mc"+cnt]._y = 50*cnt; ↓変更↓ // mc1~mc5 の y座標を設定 this["mc"+cnt]._y = mc_yArr[cnt-1]; と変更すれば良いだけです。
その他の回答 (1)
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
画像をステージの外に配置しておけばいいんじゃないでしょうか。
お礼
お礼が遅くなりまして大変失礼いたしました。 ご回答いただきありがとうございました。 確かに画像をステージの外に配置すれば最初の状態で不可視にはできますね。
お礼
お礼が遅くなりまして大変失礼いたしました。 今回も分かりやすいご回答をいただきましてありがとうございます。 非常に拙い間違いだらけのスクリプトを汲み取っていただき、ここまで丁寧に解説いただいて感謝感激です!! お陰さまで、最初の非表示の件もすんなり解決いたしました。 mc1~mc5のY座標の移動は、BlurFiltan様の想定いただいた通り、y座標に規則がないものを考えていたので、その場合の配列を用意したスクリプトが大変参考になりました。 これからもご指導・ご鞭撻のほど宜しくお願いいたします。