- 締切済み
同じボタンで異なる命令ってできますか?
Flashの初心者で困っています。よろしくお願いします。 同じボタンで、一回目にボタンを押すとAの命令ができて、二回目にそのボタンを押すとBの命令をするということをしたいのですが、可能ですか? 例えば、 on(press){ this.gotoAndPlay(2); this.stop(); } という命令はできません。でも、同じボタンで一度命令して、その次に違う命令をしたいのです。 初歩的な質問だと思うのですがよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- momopof
- ベストアンサー率18% (3/16)
gotoAndPlay(2); ↑ここでフレーム(2)に移動するのですよね? フレーム(2)をキーフレームにして、ボタンに stop(); を指定すればどうでしょうか? ボタン1回目クリック→フレーム(2)へ ボタン2回目クリック→ストップ 意味が違っていたらすみません(^-^;)
色々方法はありますが, ご質問内容をシンプルに実現しようとすると, ボタンには次のように書けば良いと思います。 ------------------------------------- on (press) { // もし 変数 flag0 の値が 無い or 0 のとき if (flag0 == undefined || flag0 == 0) { // このタイムラインを フレーム2 に進めて再生 this.gotoAndPlay(2); // そして 変数 flag0 の値を 1 にする flag0 = 1; // もし 変数 flag0 の値が 1 のとき } else if (flag0 == 1) { // このタイムラインを ストップ this.stop(); // 変数 flag0 の値を 0 にする flag0 = 0; } } ------------------------------------- 何でも良いので1つ変数を想定して(上記の場合 flag0 ), その変数の値を入れ替えてやればできます。 上記は他言語でも,またたいていどんなときでも使える方法ですが, 上のようにするとは決まっていませんしまだまだ考えれば考えるだけ無数に方法はあります。 ====== 例えば, 1つのムービークリップの中に, 複数のフレームを用意して, 各フレームには同じボタンを複数入れておき, ↓this.stop(); レイヤー 筆・・|○ | レイヤー 筆・・|●|●|●|●| ↑同じボタン そのムービークリップの上の(_parent の)階層のタイムラインを任意のフレームに進めておいて, そのムービークリップ自身の(this の)階層のタイムラインは,次のフレームに進ませるという方法も考えられます。 ====== そういう方法を言っていると 本当にキリがありませんが, 変数 flag を使うのではなく, 現状の状態をボタンに把握させても良いですね。 ------------------------------------------- on (press) { // もし 現在のフレームが フレーム1 のとき if (this._currentframe == 1) { // このタイムラインを フレーム2 に進めて再生 this.gotoAndPlay(2); // もし 現在のフレームが フレーム2 以上のとき } else if (this._currentframe > 1) { // このタイムラインを ストップ this.stop(); } } ------------------------------------------- ただし,これはどんな場合でも使えるわけではありませんが, 1つの方法です。 ====== さらに, 2つや3つの動作ではなく,もっとたくさんの動作をさせる場合は, if文など使わずに, 複数のフレーム数を配列変数の要素としてデータベース化しておき, その配列要素のフレーム数にアクセスする方法も考えられますし, ユーザー定義関数(function)をあらかじめたくさん作っておいて, ボタンからはそれぞれ場合によって違うユーザー定義関数を実行させても良いです。
お礼
早い回答、そして丁寧な回答、本当にありがとうございます! 例として、gotoAndPlay(2); と書いてしまったんですけど、実際、一つのフレームで ムービーを色々動かそうとしていたので 回答いただいた方法で試してみようと思います。 正直、今回初めて質問させていただいたのですがこんなに早く 丁寧な回答を頂いて感動しています。 ありがとうございます。今後ともどうぞよろしくお願いします。
お礼
早い回答ありがとうございます。 初心者ながらFlshMediaSaverを扱っていてフレームを考えずに フレーム内のボタンでムービーを色々動かそうとしてたのですが やはり、複数のフレームを使いながら考えないといけないみたいですね。 これから、試してみます。ありがとうございます!