• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数ボタンの生成 - actionscript)

複数ボタンの生成 - ActionScript

このQ&Aのポイント
  • 複数のムービークリップをボタンにする方法を教えてください。
  • ムービークリップをボタンに変換する方法についてわかりません。
  • EnterFrame内での記述方法について教えてください。

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

  • ベストアンサー
noname#35109
noname#35109
回答No.1

状況全体が良くつかめませんが, > そのムービークリップ > をボタンにしたいのですがうまく行きません。 の部分について回答します。 onEnterFrame = function () に関してはとりあえず抜かせてもらうとして, おそらく次のようにしたいのではないでしょうか(コピペ可)↓ ---------------------------------------- for (var i = 1; i<5; i++) { _root.createEmptyMovieClip("mc"+i, i); var load_mc = _root["mc"+i]; var jpg = i+".jpg"; load_mc.loadMovie(jpg); i = i-1; load_mc._x = i*200; i = i+1; // ★本当はここで定義したい↓ load_mc.onPress = function() { trace("あいうえお"); }; } ---------------------------------------- しかし, load_mc.onPress を定義できないので, onEnterFrame = function () で定義した。 ということではないかと思います。 これはなぜ定義できないかというと, 定義した後に JPEG がロードされるので, せっかく定義した load_mc.onPress が破棄されるからです。 プログラミング上は次のような流れでです。 (1) 空のムービークリップを作成 (2) そこに JPEG をロード (3) そのムービークリップに動作定義 しかし現実はそうならず次のようになります。 (1) 空のムービークリップを作成 (2) そのムービークリップに動作定義 (3) そこに JPEG がロードされる ロード命令自体は即実行されますが, 実際にロードされるのには時間が必要です。 ムービークリップ内に動作や変数を定義しても, その後に JPEG が読み込まれると, すべては JPEG に乗っ取られてしまうので,つまり破棄されてしまうということです。 この件に関して簡単に対処するには, 次のような方法が考えられます。 空の親ムービークリップの中に,さらに空の子ムービークリップを作成して, その子ムービークリップに JPEG をロードするという方法です。 これだと,子ムービークリップは JPEG に乗っ取られてしまっても, 親自体は残っているので,親の動作定義は残ります↓。 ----------------------------------------- for (var i = 1; i<5; i++) { _root.createEmptyMovieClip("mc"+i, i); var load_mc = _root["mc"+i]; // ●_root.mc1~4内にさらに my_mc を作成 load_mc.createEmptyMovieClip("my_mc", 0); var jpg = i+".jpg"; // ●_root.mc1~4内の my_mc に jpg をロード load_mc.my_mc.loadMovie(jpg); i = i-1; load_mc._x = i*200; i = i+1; // ★するとここで定義できる↓ load_mc.onPress = function() { trace("あいうえお"); }; } ----------------------------------------- 実際の時間的流れは次のようになります (1) 空の親ムービークリップを作成 (2) そこに空の子ムービークリップを作成 (2) 親ムービークリップに動作定義 (3) 子ムービークリップに JPEG がロードされる その他, loadMovie でロードするのではなく, MovieClipLoader クラスのメソッドを使って, 「JPEG のロードが完了次第→動作定義する」 という方法もあります。 loadMovie では,ただ読み込み命令をするだけで, JPEG などが 「実際に存在するのか」 「読み込み中なのか」 「読み込みが完了したのか」などなどを把握できません。 MovieClipLoader クラスを使うと, それらのことがわかるので, 「JPEG のロードが完了次第→動作定義する」 ということが可能になります。 この回答では省略しますが参考までに↓。 「MovieClipLoaderクラスについて」 http://www.fumiononaka.com/TechNotes/Flash/FN0501003.html Flashゲーム講座&ASサンプル集【ファイルの読み込みについて】 「SWF、JPEGファイルを読み込みたい(FlashMX2004以降)」 http://hakuhin.hp.infoseek.co.jp/main/as/import.html#IMPORT_03 ====================== 次に onEnterFrame = function () の方ですが, すみませんが,これは状況がよくわかりません。 動きが変なような気がします...。 理解することに挫折しました。降参です。 実際に動かそうとされている動きとは全く違うと思いますが, 代わりとなるサンプルを勝手に用意しました。 こんな感じで活用すればいいのではないかという単なる例だと思ってください。 -------------------------------------- // 変数 flag の初期化 var flag = 0; // for (var i = 1; i<5; i++) { _root.createEmptyMovieClip("mc"+i, i); var load_mc = _root["mc"+i]; // ◎各ムービークリップに固有の変数を代入 load_mc.n = i; // ●_root.mc1~4内にさらに my_mc を作成 load_mc.createEmptyMovieClip("my_mc", 0); var jpg = i+".jpg"; // ●_root.mc1~4内の my_mc に jpg をロード load_mc.my_mc.loadMovie(jpg); i = i-1; load_mc._x = i*200; i = i+1; // ★するとここで定義できる↓ load_mc.onPress = function() { // flag に 自分自身の n の値を代入 _root.flag = this.n; // ※次は単なる例 です // 変数 datum(基準)を自分自身の中心と一致させる _root.datum = this._x+this._width/2; }; } // ※以下は単なる例です _root.onEnterFrame = function() { // flag が1であれば if (_root.flag<>0) { // 基準となる座標をステージ中央に近づける _root.datum += (Stage.width/2-_root.datum)/10; // 各ムービークリップを基準となる座標と並行移動 for (var i = 1; i<5; i++) { var load_mci = _root["mc"+i]; load_mci._x = 200*i-load_mci._width/2+_root.datum-(200*_root.flag); } } }; --------------------------------------

関連するQ&A

専門家に質問してみよう