• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:スクリプトをまとめて書くには)

Actionscript 2.0でスクリプトをまとめて書く方法

このQ&Aのポイント
  • Actionscript 2.0でスクリプトをまとめて書く方法を紹介します。forループを使用してムービークリップの動作を連動させる方法や、複数のムービークリップに同じ動作をさせる方法について調べています。
  • 現在、forループを使用して連動させる方法について調べていますが、正常に動作しない問題が発生しています。iの値がeval("bbb"+i)の時点で11になってしまい、予期しない動作となってしまいます。
  • また、別のムービークリップに同じ動作をさせたい場合、まとめて書くことは可能なのかについても調べています。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

前置きとして... eval は古い関数で昨今はほとんど使いません。 配列アクセス演算子 [] を使うのが一般的です。 「ドット演算子と配列アクセス演算子」 http://fumiononaka.com/TechNotes/Flash/FN0507001.html まず クリックイベントを設定する各「aaa○」 内に固有の i を保存しておいて その固有の数を参照する方法があります↓。 for (i=1; i<=10; i++) { //「aaa○」内の変数 num に i を保存 this["aaa"+i].num = i; //「aaa○」クリック時 this["aaa"+i].onRelease = function() { //この「aaa○」内をフレーム2から再生 this.gotoAndPlay(2); //この「aaa○」の親にある「bbb○」をフレーム2から再生 this._parent["bbb"+this.num].gotoAndPlay(2); }; } 推奨はしませんが 上のスクリプトを eval を使って書き直すと次のようになります。 for (i=1; i<=10; i++) { //「aaa○」内の変数 num に i を保存 eval("this.aaa"+i).num = i; //「aaa○」クリック時 eval("this.aaa"+i).onRelease = function() { //この「aaa○」内をフレーム2から再生 this.gotoAndPlay(2); //この「aaa○」の親にある「bbb○」をフレーム2から再生 eval("this._parent.bbb"+this.num).gotoAndPlay(2); }; } また 「クロージャ」というものを使っても良いと思います↓。 for (i=1; i<=10; i++) { //「aaa○」クリック時の動作として //関数 abGotoPlay の戻り値を代入 _root["aaa"+i].onRelease = abGotoPlay(i); } //関数 abGotoPlay の定義 function abGotoPlay(num) { //関数を戻り値として返す return function () { //「aaa○」と「bbb○」をフレーム2から再生 _root["aaa"+num].gotoAndPlay(2); _root["bbb"+num].gotoAndPlay(2); }; } これまた推奨はしませんが 上のスクリプトを eval を使って書き直すと次のようになります。 for (i=1; i<=10; i++) { //「aaa○」クリック時の動作として //関数 abGotoPlay の戻り値を代入 eval("_root.aaa"+i).onRelease = abGotoPlay(i); } //関数 abGotoPlay の定義 function abGotoPlay(num) { //関数を戻り値として返す return function () { //「aaa○」と「bbb○」をフレーム2から再生 eval("aaa"+num).gotoAndPlay(2); eval("bbb"+num).gotoAndPlay(2); }; }

関連するQ&A