Flash8とwinXPを利用してラジオボタンの作り方を教えてください

このQ&Aのポイント
  • Flash8とwinXPを利用してラジオボタンの作り方について教えてください。
  • ラジオボタンを作成するためには、3つのムービークリップを作成し、それぞれにラジオボタンを配置します。
  • また、false・trueを使用してクリックされたラジオボタンに応じて表示される内容を制御します。
回答を見る
  • ベストアンサー

ラジオボタンの作り方

Flash8とwinXPを利用しています。 ラジオボタンについて教えてください。 《A》《B》《C》3つのムービークリップを作りました。 ラジオボタン(1)ALL (2)A (3)B (4)C の4つを作り、false・trueを使用して  (1)をクリックすると A・B・C 全部が表示  (2)をクリックすると A のみ表示  (3)をクリックすると B のみ表示  (4)をクリックすると C のみ表示 という画面を作りたいと思っています。 【チェックボタン】では作成できたのですが、【ラジオボタン】の "Group"? がよく分からなくてうまくゆきません。 初歩的なことだと思うのですが注意点等を含めて、教えてください。

  • mcx
  • お礼率50% (23/46)
  • Flash
  • 回答数4
  • ありがとう数7

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.4

レイヤーの構成が  レイヤー  【フォルダ】    ├ムービークリップ    └ムービークリップ ↑このようになっているムービークリップがステージにいくつかあり、それぞれのムービークリップ内のフォルダごと表示・非表示を切り替える、という話ではないかと思ったので#3の作例をご紹介したのですが。 そうではなく、メインのタイムライン(ムービー)のレイヤー構成が  【フォルダA】    ├ムービークリップ《A》    └ムービークリップ《X》  【フォルダB】    ├ムービークリップ《B》    └ムービークリップ《Y》 このようになっていて、【フォルダA】や【フォルダB】に含まれるレイヤーごと表示・非表示を切り替えたいとのことでしょうか? #3にも書きましたように、レイヤーはムービーの制作時に作業をしやすくするものであって、スクリプトでは操作できません。 スクリプトで表示・非表示を切り替えたり、移動や拡大などの変形を加えたい時はムービークリップを利用します。 例えば、【フォルダA】に含まれるレイヤーの表示を操作したいのであれば、【フォルダA】と同じ内容のムービークリップシンボルを作ります。 ムービークリップもメインのタイムラインと同様に、レイヤーを利用することができます。 メインのタイムラインにあるレイヤーフォルダの内容を1つの独立したムービークリップシンボルにまとめ、メインのタイムラインにはこれのインスタンスを置いてスクリプトで制御することが、最も確実ではないかと思います。 シンボルを複製して簡単に・・・というわけにはいきませんが、フレームのコピーと複数フレームの編集機能を使うと少しはラクにシンボルに移すことができます。 1つのレイヤーフォルダの内容を1つのシンボルにしてインスタンスをステージで扱うのであれば、ステージには3つのムービークリップが並んでいるだけの話になりますから、#1の要領で表示を切り替えられるようになります。 ------------------------------------------------------------- 表示を切り替えたいレイヤーフォルダのレイヤーに登場するものが全てムービークリップだとすると、enterFrame イベントでラジオボタンの選択状況を監視して表示を切り替えることもできます。 これは、次のように考えます。 今後登場する予定のムービークリップも含めて、操作するムービークリップの名前を全て配列変数に登録しておきます。 enterFrame イベントを利用してラジオボタンの選択状況を常時監視し、選択されたボタンに応じて、この配列変数を見ながらムービークリップの _visible プロパティを書き換えます。 ActionScript では、存在しないムービークリップに対して指示を出しても何も起こりません。 まあ、こういうことをアテにする作り方は安全・確実とは言えないのですが、1つの方法としてご紹介します。 ただし、フレームレート分の1秒ごとに全ムービークリップの _visible プロパティを書き換える処理が必ず行われるために、対象となるムービークリップの数が多いと処理が重くなる可能性もあります。 トゥイーンを利用しているムービークリップは、同じ名前を付けておくとキーフレームが変わっても同じインスタンスと見なされますが、1つでも名前を間違えると違うものとして扱われますのでご注意ください。 ************************ ActionScript では、”参照”といって、ムービークリップなどのインスタンスや変数・関数が格納されているメモリ上の場所を表す情報を扱うことができます。 例えば、ref という変数にムービークリップ clip の参照を入れておくと、  clip._visible = true; と  ref._visible = true; は同じ意味になります。 参照を変数に代入するには、その時点で、対象となるムービークリップなどが存在していなければなりません。 今回はスクリプトが実行される時点ではまだステージに登場していないムービークリップも扱いたいのですが、ステージにないムービークリップの参照を代入すると、undefined (未定義)という値が記録されてしまいます。 しかし、ActionScript には文字列を参照に変換できる機能があります。 この機能を利用して、配列変数にはムービークリップの名前を入れておき、必要な時に参照に変換して使うことにします。 メインのタイムラインに、複数のレイヤーをまとめたフォルダA~Cがあるとします。 これらのフォルダにはとりあえず、それぞれレイヤーが2つずつあって、そのレイヤーにはそれぞれ  【フォルダA】    ├ clip_a    └ mc1  【フォルダB】    ├ clip_b    └ mc2  【フォルダC】    ├ clip_c    └ mc3 というムービークリップが配置されているとします。 今回は配列変数を見ながら総当たりで操作しますので、ムービークリップの名前に規則性がなかったり、レイヤー内の途中のフレームから名前が変わるなどの状況にも対応できます。 ただし、各キーフレームに登場するムービークリップ全てにインスタンス名が付いていることと、配列変数に登録忘れがないことが条件です。 ラジオボタンの data パラメータには、どのフォルダを操作するのかの手がかりを入れます。 とりあえず、フォルダAを表示するボタンに” a ”、フォルダBに” b ”、フォルダCに” c ”、そして全部表示するボタンには” all ”の文字列を入れるとします。 スクリプトは、ラジオボタンと表示するムービークリップがあるタイムラインのフレームに記述してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください) /***********************************************************/  //表示・非表示を切り替える全ムービークリップの名前のリスト  clip_list = new Array();  clip_list =  [   "clip_a" , "mc1" ,   "clip_b" , "mc2" ,   "clip_c" , "mc3"  ];  //全てのムービークリップを表示または非表示にする関数  //引数 visible_mode:true(全て表示)またはfalse(全て非表示)  function All_OnOff( visible_mode:Boolean )  {   var i , temp;   //リストに含まれる全てのムービークリップの_visibleプロパティを書き換える   for( i = 0; i < clip_list.length; i++ )   {    //リスト内の名前をムービークリップの参照に変換    temp = this[ clip_list[ i ] ];    //_visibleプロパティを指定の値に書き換える    temp._visible = visible_mode;   }  }  //ラジオボタンの選択状況を監視する処理  this.onEnterFrame = function()  {   var sel_data;   //現在、選択されているラジオボタンに設定されている値を取得   sel_data = radioGroup.selection.data;   //選択されているボタンに応じてムービークリップの表示・非表示を切り替える   //全表示(sel_data = "all")以外は、一旦全てを非表示にしてから該当するものだけ表示   switch( sel_data )   {    //レイヤーフォルダAを表示    case "a":     All_OnOff( false );     this.clip_a._visible = true;     this.mc1._visible = true;     break;    //レイヤーフォルダBを表示    case "b":     All_OnOff( false );     this.clip_b._visible = true;     this.mc2._visible = true;     break;    //レイヤーフォルダCを表示    case "c":     All_OnOff( false );     this.clip_c._visible = true;     this.mc3._visible = true;     break;    //全レイヤーフォルダを表示    case "all":     All_OnOff( true );     break;   }  }; /***********************************************************/ 上記のスクリプトでは、冒頭にある配列変数 clip_list でムービークリップの名前を管理しています。 例えば、フォルダCには clip_c ・ mc3 ・ mc_z の3種類が登場する、というような場合は  clip_list =  [   "clip_a" , "mc1" ,   "clip_b" , "mc2" ,   "clip_c" , "mc3" , "mc_z"  ]; このように変更し、フォルダCのを表示する処理である、switch 文の case "c": の部分に  this.mc_z._visible = true; を追加していただくと対応できます。 ある特定のフレームに登場するムービークリップだけ表示が残ったり、非表示のまま戻らなかったりする場合は、配列変数に登録した名前とインスタンスの名前が一致しているか・インスタンス名の付け忘れがないかどうかを確認してみてください。 ------------------------------------------------------------- 各キーフレームに存在するムービークリップ全てにインスタンス名を付け、更にその名前を配列変数の中に記述するとなると、大変な手間になる上に、間違いや不慮のトラブルが起こりやすくなります。 また、スクリプトで制御できない描画オブジェクトやグラフィックシンボルなどは、どうやっても表示を切り替えることができません。 複雑な構成の作品であるほど、苦労した割には実りの少ないと感じる、本当に応急的な方法です。 やはり、レイヤーフォルダの内容をシンボルに移して、1つのムービークリップとして扱えるようにする方法が、簡単かつ確実だと思います。 別のタイムラインにあるフレームをシンボル内にコピーすると、位置がズレて調整が少々面倒ですが、ムービークリップにまとめているのであれば、スクリプトで操作できない描画オブジェクトなどが含まれていても簡単に表示・非表示を切り替えられます。 後から面倒な手間をかけなくても済むにように、いくつかのオブジェクトを同時に操作したいものは最初から1つのムービークリップ内にまとめておくことが得策です。 Flash Professional 8 をお使いでしたら、これと似たような発想で作る、フォームアプリケーションやスライドプレゼンテーションがあります。 フォームアプリケーションのフォームは1つのムービークリップになっていて、この中に自分のムービークリップや絵などを挿入し、フォームを重ね合わせて作品を作っていきます。 興味がありましたら、研究してみてください。

その他の回答 (3)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.3

【フォルダー】とは、複数のレイヤーをまとめるためのフォルダのことで、よろしいでしょうか? スクリプトで特定のレイヤーにあるものだけ非表示にしたり、複数のレイヤーを収めたレイヤーフォルダを操作する、といったことはできません。 レイヤーはムービークリップの重なり順(深度)などに影響を及ぼしますが、レイヤーの名前はスクリプトと関係がありませんし、スクリプトでレイヤーを操作するといったこともできません。 レイヤーは基本的に、ムービーを制作する時に作業を手助けするためのものです。 あるムービークリップの中のレイヤーフォルダごと表示を切り替えるのでしたら、このフォルダの内容を1つのムービークリップにしてはいかがでしょう。 ムービークリップであればスクリプトで操作可能で、親のムービークリップが非表示になった時には子のムービークリップも全て非表示になりますので、子ムービークリップの _visible プロパティを1つずつ操作せずに済みます。 既にムービークリップシンボルがあるとのことですから、シンボルの複製を作ると簡単です。 例えばムービークリップ《A》を例にしますと、 ・「ライブラリ」パネルで《A》のシンボルを選択した状態で右クリックのメニューを開き、「複製」を選びます。 ・複製されたシンボルを編集して、レイヤーフォルダ以外のレイヤーを削除します。 これで、レイヤーフォルダの部分が独立したムービークリップシンボルになります。 ・オリジナルのシンボルを編集し、シンボル内に先ほどのシンボルのインスタンスを配置します。 新しいレイヤーを追加し、レイヤーフォルダを削除する前に位置を確認しながら配置すると、簡単に置き換えることができます。 インスタンスに名前を付けてください。仮に、” blink_clip ”と付けたとします。 ・オリジナルのシンボルにあるレイヤーフォルダを、フォルダごと削除してください。フォルダ内のレイヤーがまとめて削除されます。 ここまでの作業で、ムービークリップ《A》内のレイヤーフォルダの内容が、ムービークリップインスタンス” blink_clip ”に変わります。 複製から作ったものですから、blink_clip の内容はオリジナルにあったレイヤーフォルダと全く同じです。 同様の作業を、他のムービークリップシンボルでも行ってください。 レイヤーフォルダをまとめたムービークリップの名前を全て” blink_clip ”に統一しておけば、スクリプトでは  親ムービークリップ.blink_clip._visible = true; という形で操作することができます。 親ムービークリップが全て同じタイムラインにあるならば、ラジオボタンの data パラメータには、#1と同様に親ムービークリップのインスタンス名を入れます。 違うタイムラインにある場合は、配列変数を使って親ムービークリップがあるタイムラインの表を作り、ラジオボタンの data パラメータにはこの表のどこを見るかの情報を入れておくことで対応できます。 ------------------------------------------------------------- ステージに、ムービークリップシンボル《A》~《C》のインスタンス clip1 ~ clip3 があり、それぞれに” blink_clip ”という子ムービークリップが含まれているものとします。 ラジオボタンの設定は#1と同じです。 4つのラジオボタンの操作により表示を切り替えるスクリプトは、次のようになります。 このスクリプトは、メインのタイムラインのフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) /******************************************************/  //ラジオボタンが選択された時に呼び出される関数  radio_obj = new Object();  radio_obj.click = function( event_obj:Object )  {   var sel_data , clip_name;   var base_target;   var i;   //親ムービークリップの持ち主のタイムラインを設定   base_target = _root;   //親ムービークリップに共通する名前   clip_name = "clip";   //選択されたラジオボタンに設定されている値を取得   sel_data = event_obj.target.selection.data;   //取得した値が”all”の時は、全て表示するボタンが選択されたと見なす   if( sel_data == "all" )   {    //全ての子ムービークリップを表示    for( i = 1 ; i <= 3; i++ )    {     base_target[ clip_name + i ].blink_clip._visible = true;    }   }   //それ以外の場合は該当するものだけ表示   else   {    //一旦、全ての子ムービークリップを非表示にする    for( i = 1 ; i<= 3 ; i++ )    {     base_target[ clip_name + i ].blink_clip._visible = false;    }    //該当する子ムービークリップを表示    base_target[ sel_data ].blink_clip._visible = true;   }  };  //イベントハンドラを登録  radioGroup.addEventListener( "click" , radio_obj ); /******************************************************/ 他にも、マスクを使って表示を制限することで表示 / 非表示を切り替える方法もあります。 ただし、ムービークリップの内容によってはマスク画像を作るのに手間がかかったり、複雑なマスクになると処理が重くなる・ラジオボタンの選択によらず常時表示しておきたい部分と表示を切り替えたい部分が重なっている時には上手くいかないなど、難点もいろいろ考えられます。 どの方法にしても、スクリプトではレイヤーの操作ができない以上、もとのムービークリップに手を加える手間は省けないと思います。

mcx
質問者

補足

いろいろとありがとうございます。何度でもでご迷惑でしょうが、次の各点がわかりません。 まず、条件をもう少し説明をさせて下さい。 【A】フォルダー内にMCの《A》と《X》を配置してあります。 《A》《X》はステージ上では同一のX軸上にあり、《A》はタイムライン「1」で表示され、X軸上を20移動してタイムライン「30」の時点で停止します。《X》はタイムライン「15」で表示され、同一X軸上を22移動してタイムライン「30」の時点で停止します。結果はタイムライン「30」の時点で、[AX]と並んで表示されるものとします。 ところで、先回ご指示頂いた <<「複製されたシンボルを編集して、レイヤーフォルダ以外のレイヤーを削除します。>> 内の「複製」は、この場合《A》《X》の双方でしょうか? 「編集」とは、具体的に「どうする」ことでしょうか? 「レイヤーフォルダ以外のレイヤーを」は、【A】フォルダー以外の【B】【C】及びその他のレイヤーでしょうか?この場合、【B】【C】及びその他のレイヤーが無くなってしまっては?と単純な疑問が発生します。 結果、<<これで、レイヤーフォルダの部分が独立したムービークリップシンボルになります。>> 以下のご説明が分からなくなってしまいました。 せっかくのご指示ですので是非完成させたいと思います。 再三で恐縮です。次のご回答の後もまたご照会させて頂くかもわかりませんが、宜しくお願いいたします。

  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

#1です。 スクリプトのどこかに、全角のスペースや余計な文字が混入していませんでしょうか? ブラウザではタブと行頭の半角のスペースが省略されて見辛くなってしまうため、#1のスクリプトは全角のスペースでインデントを付けています。 実際のスクリプトでは、文字列とコメント以外の部分に全角のスペースが入っているとエラーになります。コピーする際は、全て半角のスペースかタブに置き換えてください。 「アクション」パネルにある「検索」ボタンを押し、検索文字列に全角のスペースを入力して「すべて置換」ボタンを押すと、行頭の全角スペースを簡単に削除できます。 こちらでもコピーしてチェックしたところ、正常に動作しました。 スペースを削除したものを掲載しますので、よろしければこちらでもお試しください。 /******************************************************/ //ラジオボタンが選択された時に呼び出される関数 radio_obj = new Object(); radio_obj.click = function( event_obj:Object ) { var sel_data , clip_name; var base_target; var i; //表示するムービークリップの持ち主のタイムラインを設定 base_target = _root; //各ムービークリップに共通する名前 clip_name = "clip"; //選択されたラジオボタンに設定されている値を取得 sel_data = event_obj.target.selection.data; //取得した値が”all”の時は、全て表示するボタンが選択されたと見なす if( sel_data == "all" ) { //全てのムービークリップを表示 for( i = 1 ; i <= 3; i++ ) { base_target[ clip_name + i ]._visible = true; } } //それ以外の場合は該当するものだけ表示 else { //一旦、全てのムービークリップを非表示にする for( i = 1 ; i<= 3 ; i++ ) { base_target[ clip_name + i ]._visible = false; } //該当するムービークリップを表示 base_target[ sel_data ]._visible = true; } }; //イベントハンドラを登録 radioGroup.addEventListener( "click" , radio_obj ); /******************************************************/ なお、Flash 8 に付属の UI コンポーネントは ActionScript 2.0 で作成されています。 ActionScript 1.0 向けにパブリッシュすると、正常に動作しません。必ず、2.0 でパブリッシュしてください。 また、これらのコンポーネントは Flash Player 6 (ただし、リリースバージョンに制限あり)でも動くことになっているのですが、一部は不具合があったり動かなかったりするようなので、Flash Player 7 以降でパブリッシュする方が無難だと思います。

mcx
質問者

補足

引き続き質問させて下さい。 ムービークリップ《A》(インスタンス名:clip1)表示を、ラジオボタンA(data=clip1)で、 ムービークリップ《B》(インスタンス名:clip2)表示を、ラジオボタンB(data=clip2)で、 ムービークリップ《C》(インスタンス名:clip3)表示を、ラジオボタンC(data=clip3)で、 ムービークリップ《A》《B》《C》全体表示を、ラジオボタンall(data=all)で、 準備して、教えて頂いたSCRIPTをフレームに設定して、当初の動きが完了いたしました。(ありがとうございます) ところで、実際に私が作成いたしております画面では、 Aラジオボタンの操作でムービークリップ《A》と同一フォルダー【A】内に作成・格納したムービークリップ《X》や、 Bラジオボタンの操作でムービークリップ《B》と同一フォルダー【B】内に作成・格納したムービークリップ《Y》や、 Cラジオボタンの操作でムービークリップ《C》と同一フォルダー【C】内に作成・格納したムービークリップ《Z》 のように1つのラジオボタンの操作するムービークリップをまとめたフォルダー【A】【B】【C】内に複数のムービークリップが存在しています。そして其々のムービークリップには「タイムラインエフェクト」が設定されて「タイムライン」に従って各々が移動したり、表示・非表示されるようにしたいと考えています。 ラジオボタンA・B・Cをクリックすることで、複数の「タイムライン」が設定されているムービークリップが格納されているフォルダー【A】【B】【C】其々全体の表示・非表示が最終的な目的なのですが、 (1)X・Y・Z … に其々 clip4・clip5・clip6 … と連続した名前をつけて処理するのでしょうか? この場合、ラジオボタンAが操作する「clip」をどのように指定するのでしょうか? (2)または、フォルダー【A】【B】【C】に独自の「インスタンス名」を着けてボタン操作することになるのでしょうか? この場合、インスタンス名の着け方はどのようになるのでしょうか? 細かく何度もの質問でご迷惑をかけますがよろしくお願いします。

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

ラジオボタンの仕組みを1から自分で作ると大変ですから、手っ取り早いところで、Flash に最初から付いているラジオボタンのコンポーネント( RadioButton コンポーネント)を利用してはいかがでしょう。 ラジオボタンは複数のボタンが連動するナビゲーションです。 RadioButton コンポーネントはボタンを必要な数だけ設置できるように、ボタンが独立したコンポーネントになっています。 とすると、どのボタンが連動する仲間なのかを識別する方法が必要です。 RadioButton コンポーネントは”グループ”という考え方を採用しており、同じグループ名を持つインスタンスが連動するように作られています。 このため、グループ単位でのイベント処理や、同じプロパティでも値を入れる時と中身を見る時とでは書き方が違うなど、他の UI コンポーネントとは異なる独特の特徴があります。 RadioButton コンポーネントは、画面に表示されない値を設定してスクリプトの中で利用することができます。 何の値を持たせるかによって、作り方もいろいろと変わってきます。 今回は次のように考えます。 この作例ではムービークリップを操作するので、その手がかりを値として入れておくと便利です。 例えば、ムービークリップを個別に表示するボタンには対応するムービークリップの”インスタンス名”を、全て表示するボタンには” all ”という文字列を設定するものとします。 RadioButton コンポーネントでは、グループ内でいずれかのボタンが選択された時に” click ”というイベントが発生します。 このイベントを利用して選択されたボタンを調べ、そのボタンに設定されていた値を取得して、内容が” all ”であれば全てのムービークリップを表示し、それ以外の時は該当するものだけを表示するようにします。 ------------------------------------------------------------ 作り方の一例です。 3つのムービークリップに、共通する名前+通し番号でインスタンス名を付けてください。 ここでは仮に、clip1 ・ clip2 ・ clip3 と付けたとします。 RadioButton コンポーネントのインスタンスを4つ、ステージに配置します。 コンポーネントとは編集可能なパラメータを持っているムービークリップのことで、パラメータは「パラメータ」パネルで編集できます。「パラメータ」パネルは、デフォルトの配置では「プロパティ」パネルとタブになって並んでいます。 「パラメータ」パネルで、それぞれのボタンのパラメータを次のように設定してください。  ・ data   個別に表示するボタンには clip1 や clip2 など、ムービークリップの”インスタンス名”を指定します。   全て表示するボタンには all と入れてください。  ・ groupName   ボタンが所属するグループの名前です。   とりあえず、デフォルトの” radioGroup ”で構いません。  ・ selected   最初に選択済みにしておくボタンに true を設定します。   今回はさしあたって、全て表示するボタンを true にします。 残る label と labelPlacement パラメータは、項目名(ラベル)とラベルの位置の指定です。ご希望に合わせて編集してください。 以上で準備は完了です。 次はスクリプトを書きます。 *************************** ステージに、ムービークリップのインスタンス clip1 ~ 3 と、RadioButton コンポーネントのインスタンスが4つあるとします。 ラジオボタンの操作によりムービークリップの表示 / 非表示を切り替えるスクリプトは、次のようになります。 このスクリプトは、メインのタイムラインのフレームに記述してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //ラジオボタンが選択された時に呼び出される関数  radio_obj = new Object();  radio_obj.click = function( event_obj:Object )  {   var sel_data , clip_name;   var base_target;   var i;   //表示するムービークリップの持ち主のタイムラインを設定   base_target = _root;   //各ムービークリップに共通する名前   clip_name = "clip";   //選択されたラジオボタンに設定されている値を取得   sel_data = event_obj.target.selection.data;   //取得した値が”all”の時は、全て表示するボタンが選択されたと見なす   if( sel_data == "all" )   {    //全てのムービークリップを表示    for( i = 1 ; i <= 3; i++ )    {     base_target[ clip_name + i ]._visible = true;    }   }   //それ以外の場合は該当するものだけ表示   else   {    //一旦、全てのムービークリップを非表示にする    for( i = 1 ; i<= 3 ; i++ )    {     base_target[ clip_name + i ]._visible = false;    }    //該当するムービークリップを表示    base_target[ sel_data ]._visible = true;   }  };  //イベントハンドラを登録  radioGroup.addEventListener( "click" , radio_obj ); *************************** ActionScript では、ムービークリップ等を操作する時にはその持ち主を正確に指定しなければなりません。 上記のスクリプトでは、表示を切り替えるムービークリップの持ち主のタイムラインを” base_target ”という変数に格納しています。 clip1 ~ 3 がステージにある場合、これらの持ち主は通常は _root という名前のムービークリップです。 例えば、あるムービークリップ” clip_group ”の中に clip1 ~ 3 がある場合は、関数の冒頭にある  //表示するムービークリップの持ち主のタイムラインを設定  base_target = _root; ↑この部分を  base_target = _root.clip_group; このように書き換えてください。 ムービークリップに共通する名前も変数に入れています。 共通する名前が” clip ”ではない時は、  //各ムービークリップに共通する名前  clip_name = "clip"; ↑この部分を変更してください。 ------------------------------------------------------------ ラジオボタンの連動は RadioButton コンポーネントが引き受けてくれますが、ラジオボタンの操作により複数のムービークリップが連動して表示が切り替わる仕組みについては自分で工夫しなければなりません。 上記のスクリプトで該当するものだけ表示する部分は、一旦全てのムービークリップを非表示にし、その後で表示するものだけ _visible プロパティを変更しています。 複数のムービークリップを操作する常套手段として、共通する名前+連番でインスタンス名を付ける手法があります。 A や B といった文字で名前を付けるとこの手法が使いにくくなりますので、通し番号を利用することをオススメします。 先述の通り、ラジオボタンは複数のボタンが連動する仕組みのため、RadioButton コンポーネントにはグループという独特の概念があります。 グループ内のボタンが選択されたかどうかを検出するには、” click ”イベントを利用します。 このイベントを検出する時は、ボタン1つ1つのインスタンス名ではなく”グループ名”を使う点にご注意ください。 ラジオボタンは、デフォルトでいずれかのボタンが選択された状態になっていることが多いかと思います。 今回はさしあたって、全て表示するボタンをデフォルトで選択済みとし、ムービークリップも最初から3つとも表示された状態になっています。 任意のムービークリップを表示した状態から始めたいのでしたら、該当するものだけ表示するスクリプトを追加し、それに対応するボタンの selected パラメータを true に設定してください。 なお、同じグループ内に selected パラメータが true になっているボタンが複数あっても、デフォルトで選択済みになるのは1つだけです。 長くなってすみませんでした。 不明な点がありましたら、補足してください。

mcx
質問者

補足

大変ご丁寧なご指導をありがとうございます。早速《作例》に従ってスクリプトをコピーさせて頂き、ペーストのうえ「チェック」をかけたところ、 >//ラジオボタンが選択された時に呼び出される関数 >radio_obj = new Object(); >radio_obj.click = function( event_obj:Object ){ > var sel_data , clip_name; > var base_target; > var i; > > //表示するムービークリップの持ち主のタイムラインを設定 > base_target = _root; 前半の上記スクリプトの内で、 ■**エラー** シーン = シーン 1, レイヤー = script, フレーム = 1 :行 4:演算子 '=' は、オペランドの前に来る必要があります。  var sel_data , clip_name; ■**エラー** シーン = シーン 1, レイヤー = script, フレーム = 1 :行 5:シンタックスエラー  var base_target; のエラー表示となりました。 この場合、'レイヤー = script'はメインのタイムラインの名称です。 この2つのエラーの解消が分からないために、引き続きの検証が出来ませんでした。恐縮ですが、解消方法を教えていただけませんでしょうか? よろしくお願いいたします。

関連するQ&A

  • チェックボックスをラジオボタンでの選択に変更したい

    タイムライン(1)にA・B・C3枚のデータを作成してあります。 a・b・c3通りのチェックボックスを作成して、「a」をクリックした場合にはb・cのデータが隠れ(false)aが表示される(true)(b・cも同様で、a・b・c全部を選択していない場合には全部が表示される)スクリプトを書きました。 ところが、チェックボックスの場合には、利用者が例えば2つを選択することが可能なために、この場合には2つのデータが表示され混乱します。 そのため、チェックボックスをラジオボタンに変更して、且つ同様な動きをさせたいと思っています。 ラジオボタンの場合は「ムービークリップ」のために同様なことは出来ないのでしょうか? 宜しくお願いします。

  • Flashでのラジオボタン

    Flash勉強中のものです。 ボタンを作成し、ムービークリップの表示・非表示はできるのですが、ラジオボタンに「表示・非表示」項目を作り表示をクリックするとムービーを表示し、非表示をクリックするとムービーを消すといった事ができません。 ボタン(非表示)でする場合は以下のアクションスクリプトを記述しました。 on (release) { Color1_mc._visible=false; } ラジオボタンは同様のスクリプトでは無理なんでしょうか?

  • ボタンの非表示

    いつもお世話になっております。 OSはWinXPでFlash MXでプログラムしています。 すごく初歩的な質問だと思うのですが、検索できませんでしたので、質問いたします。 フラッシュムービーに幾つかボタンがあり、 A_btnというボタンを押すとB_btnというボタンを非表示にする方法ってありますでしょうか? C_btnと言うボタンを押した時は非表示にしたくありません。 A_btnに下記のようにしてみました。 on (release) { _root.B_btn._visible = false; } な感じでプログラムを作成してみましたが、だめでした。 分かる方がいましたらご協力お願いします。

  • ラジオボタンについて

    こんにちは。ラジオボタンについて質問させてください。 <input type="radio" name="area" value="all" onClick="area.value = 'all'" checked>ALL<br> <input type="radio" name="area" value="a" onClick="area.value = 'a'">A<br> <input type="radio" name="area" value="b" onClick="area.value = 'b'">B<br> というHTMLを記述しました。 画面が表示された後にラジオボタンをチェックして実行(別個作成)すると うまく動作するのですが、チェックボタンをチェックしずに (デフォルトの'ALL'選択のまま)実行するとうまくいきません。 どのようにすればうまく動作するのでしょうか?

    • ベストアンサー
    • HTML
  • ラジオボタンの選択判定

    こんばんわ。 ラジオボタンを使って判定を行いたいのですがうまくいきません。 やりたいのは、1,2,3のラジオボタンとaというボタンがありaを押したときにチェックがついているラジオボタンによって判定が変わるようにしたいのです。 初期設定を1はtrue、2,3はfalseにしてあります。 3つのボタンはグループ化してありますので、どれかひとつしかtrueがないです。 現状では、初期設定の状態でボタンを押しても反応しません。 一度ボタンのt/fを変更すれば判定ができるようになるのですが。 どなたかわかる方いらっしゃいましたら教えてください。 お願いします。

    • ベストアンサー
    • Java
  • ボタンをクリックでムービーを表示させストップ、その際、他のボタンは関係なく動いている

    FLASH MX 2004を使っているAction Script初心者です。 http://oshiete1.goo.ne.jp/qa4288529.html で前回の問題は解決できたのですが、新たな問題が発生しました。 _root   ├b01(モーショントゥイーンなどで動くボタン)   ├m01(表示/非表示 が変わるムービークリップ)   ├b02(モーショントゥイーンなどで動くボタン)   └m02(表示/非表示 が変わるムービークリップ) 動いているb01というボタンをクリックすると、m01というムービーが表示され、b01とm01はストップし、m01をクリックするとm01は消え、b01が再度動き出し、その間はb02は関係なく動いているというようにしたいのですが、全体がストップ、全体が動き出す、もしくはストップしないというようになってしまいます。 b02はb01と同様にクリックすると、m02というムービーが表示され、b02とm02はストップし、m02をクリックするとm02は消え、b02が再度動き出し、その間b01は関係なく動いているという仕様です。 【b01】 on (release) { _root.m01._visible = true; _root.m01.stop(); _root.b01.stop(); } 【m01】 onClipEvent (load) { this._visible = false; } on (release) { _root.m01._visible = false; _root.b01.play(); } 【b02】 on (release) { _root.m02._visible = true; _root.m02.stop(); _root.b02.stop(); } 【m02】 onClipEvent (load) { this._visible = false; } on (release) { _root.m02._visible = false; _root.b02.play(); } いろいろと間違っているかも知れませんが、ご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • FlashCS4のActionscript2.0でボタンを押して画像を

    FlashCS4のActionscript2.0でボタンを押して画像をスライド表示させる方法 ウェブサイトのトップページのヘッダー画像に スライドショーをFlashで作りたいと思っています。 動きとしては以下のURLで紹介されているようなもの。 http://www.skuare.net/test/proGlider.html 例えば、3つのボタンを A,B,C とし、 ムービークリップの画像をa,b,cとします。 ボタンBを押した時のbの動きは、 ムービークリップ”c”が表示されているときは、左からスライドして現れ ムービークリップ”a”が表示されているときは、右からスライドして現れ るようにしたいです。 お手数ですが、ご教授よろしくお願いします。

    • ベストアンサー
    • Flash
  • ムービークリップとボタンの表示(長文です

     いつも参考にさせてもらっています。題名がわかり辛くてすいません。 私はFLASH5を使用しています。 ボタンクリックによる表示非表示は、ttp://okweb.jp/kotaeru.php3?q=905694  ttp://okweb.jp/kotaeru.php3?q=1363849を参考にさせてもらいましたがうまくいかなかったため質問させていただきます。 lad01言うムービークリップインスタンスが非表示になったとき、lad02と言うムービークリップインスタンスを表示させるようにしたいので、以下のような手順で試してみました。 lad01をクリックしたときに非表示にさせるために、lad01内にクリックされたらlad01を消すように on (release) { this._visible = false; } と言うボタン(というかヒット領域)を作って、lad01はきえるようになりました。 次にlad02はとりあえず非表示にしておきたいので onClipEvent (load) { _visible = false; } と記述して非表示になりました。 次に、lad01がクリックされたとき同時にlad02を表示させるためにlad01に onClipEvent (mouseDown) { if(!lad02._visible){ lad02._visible = true; } } と記述してみましたがうまくいきませんでした。 試しに、lad01,02と同じレベル(言葉が思いつきません、内包されてない状態です) にボタンを作成し on (press) { lad01._visible = false; lad02._visible = true; } とも記述してみたんですが、これでもだめでした。 どうすれば解決できるでしょうか? 言葉が足りないところは質問してください。できるだけ答えます。

    • ベストアンサー
    • Flash
  • unless

    param("X")はラジオボタンなのですが、 unless(param("X") eq "A" and "B" and "C") とすると"A"をクリックしてある場合は、Falseになるのですが、 "B"または"C"にクリックしてある場合は、Trueとなります。 "B"または"C"をクリックしてある場合も、Falseにするには、 どのように記述するのでしょうか?

    • ベストアンサー
    • Perl
  • WEBページのラジオボタンを設定するには??

    WinXP、VB.NET、IEでプログラムを作っています。 <input type=radio name=.a value=p checked> <input type=radio name=.b value=m> <input type=radio name=.c value=g> などとなっているところのラジオボタンを設定するにはどうしたらよいでしょうか? IE.document.Forms(0).Elements(".b").Checked = True IE.document.Forms(0).Elements(".b").value("m") = True など試してみたのですがダメでした。 正しい方法をご教示頂きたくお願い致します。

専門家に質問してみよう