解決済み

ActionScriptでボタンをクリックしたときの動作をまとめて指定したい

  • すぐに回答を!
  • 質問No.974838
  • 閲覧数856
  • ありがとう数4
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 92% (23/25)

FlashMX2004で、メニューを作成しています。
ボタンの数が多いことから、いちいち一個ずつのボタンにクリックしたときの動作(getURL)を指定するのが大変なので、一番最初のフレームにActionScriptで指定したいのです。

確か、以前そういうのをやった記憶があるのですが、
とても急いでいるので調べる時間がありません。

複数のボタンが、一番上の階層にあるもの(メインメニュー)と、ムービークリップ内に配置したサブメニューと様々あります。

それぞれの指定の仕方を教えてください。

よろしくお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1

ベストアンサー率 85% (666/776)

on*** というイベントハンドラを使うと、ムービークリップやボタンが押された時のアクションをフレームでも定義しておくことができます。
例えば、ムービークリップのインスタンス clip が押された時に、新しいウィンドウを開いてページを表示するスクリプトは、

 clip.onPress = function ()
 {
  getURL( "***.html" , "_blank" );
 };

(↑このスクリプトをコピーする場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください)


この書き方であれば、複数のムービークリップやボタンへの指示を、1箇所でまとめて定義できます。インスタンスがボタンの場合でも利用できますし、ムービークリップ内のムービークリップやボタンの場合は、ターゲットパスを付けると、メインのタイムラインからでも指定できます。
(できますが、パスが複雑になる場合は、ムービークリップ内のタイムラインで指定する方がオススメです)
ただし、関数を定義する時点で、該当するムービークリップやボタンがタイムラインに登場していることが条件になります。
例えば、フレーム2で登場する clip2 というムービークリップの onPress ハンドラは、フレーム1では利用できません。定義してもエラーにはなりませんが、無効です。


対象が多い場合は、効率よくさばける方法を工夫しましょう。
1箇所でまとめて定義できるとはいえ、ボタンの数だけスクリプトを書くのは面倒です。コピー&ペーストで少しずつ変更しても、些細な間違いなどもあるかも知れません。
eval というアクションは、ムービークリップやボタンの名前を文字列で渡して、操作できるアクションです。
例えば、

 eval( "clip" ).onPress = function () ・・・

このような使い方もできますし、変数を利用して

 eval( "clip" + i ).onPress = function () ・・・

とすると、ループを利用して大量のムービークリップへの指示もコンパクトに済ませることができます。


コンポーネントというと、Flash に最初から付属している UI コンポーネントが有名ですが、自分で作ることもできます。
UI コンポーネントに、高機能だけど複雑で難しいというイメージがあるせいか、コンポーネントは高度で難しいもののように見えますが、自分の作品の中で個人的に使うなら、それほど難しいものではありません。上手く利用すると、とても便利な機能です。

コンポーネントの正体は、パラメータを持つムービークリップです。ムービークリップとして作ったものに、「コンポーネント定義」(ライブラリでシンボルを選び、右クリック/ Mac では control +クリック で出すメニューの中にあります)でパラメータを定義すると、コンポーネントになります。
「パラメータの定義」パネルでの基本操作は、「+」ボタンでパラメータの追加、「-」ボタンで削除です。すべてのパラメータを削除すると、コンポーネントはムービークリップに戻ります。
さしあたって必要な各項目の内容は次の通りです。

 ・名前
 「パラメータ」のタブで表示される、パラメータの名前。分かりやすい名前を付けておきましょう。
 ・変数
 「パラメータ」の実体となる、変数の名前。ActionScript では、 インスタンス名.ここで定義した変数名 という形で、パラメータを利用します。
 ・値
 パラメータの初期値です。
 ・タイプ
 パラメータのデータの型。よく使われるのは、Boolean( true / false )・String(文字列)・Number(数値)・Array(配列)など。
 

例えば、clip のシンボルに url というパラメータ(変数)を定義すると、clip から作られたインスタンスは、全て url というパラメータを持ちます。
コンポーネントの持つパラメータは、編集画面で「プロパティ」の右上にある、「パラメータ」のタブで編集できます。
つまり、ActionScript を直接いじらなくても、各インスタンスの持つ url という変数にそれぞれ好きな値や文字列を設定できるということで、これはコンポーネントの大きな利点です。

同じシンボルからインスタンスを作らない場合でも、ボタンとして使うシンボル全てに「 url 」という同じ名前のパラメータを指定しておき、インスタンス名を「 clip1 」「 clip2 」のように通し番号で付けると、先述の eval アクションと合わせて、次のように一気に移動先を定義することも可能です。


 for( i = 1 ; i <= 10 ; i++ )
 {
  //clip1~10がクリックされた時の動作を定義
  eval( "clip" + i ).onPress = function ()
  {
   //パラメータで持つURLに移動
   getURL( this.url , "_blank" );
  };
 }


10 個分のムービークリップの移動先が、これだけで指定できてしまうというわけです。極端な話、ムービークリップが 20 個でも 50 個でも、指定に必要なアクションはこれだけで済みます。
コンポーネントのパラメータであれば、URLの編集はムービーの編集画面でできます。配置されているボタンの実物を見ながらの編集も可能ですから、「アクション」のウィンドウで編集するよりも間違いもしにくくなりますし、訂正するのも簡単です。

お急ぎのようですので、今回は名前を付け直したりコンポーネントにするなどの余裕はないかも知れませんが、何かの折にはぜひお試しください。


長くなってすみませんでした。
不明な点がありましたら、補足してください。
OKWAVE 20th Be MORE ありがとうをカタチに
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ