質問: ラジオボタンの作り方 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"? がよく分からなくてうまくゆきません。 初歩的なことだと思うのですが注意点等を含めて、教えてください。
回答: 【フォルダー】とは、複数のレイヤーをまとめるためのフォルダのことで、よろしいでしょうか? スクリプトで特定のレイヤーにあるものだけ非表示にしたり、複数のレイヤーを収めたレイヤーフォルダを操作する、といったことはできません。 レイヤーはムービークリップの重なり順(深度)などに影響を及ぼしますが、レイヤーの名前はスクリプトと関係がありませんし、スクリプトでレイヤーを操作するといったこともできません。 レイヤーは基本的に、ムービーを制作する時に作業を手助けするためのものです。 あるムービークリップの中のレイヤーフォルダごと表示を切り替えるのでしたら、このフォルダの内容を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 ); /******************************************************/ 他にも、マスクを使って表示を制限することで表示 / 非表示を切り替える方法もあります。 ただし、ムービークリップの内容によってはマスク画像を作るのに手間がかかったり、複雑なマスクになると処理が重くなる・ラジオボタンの選択によらず常時表示しておきたい部分と表示を切り替えたい部分が重なっている時には上手くいかないなど、難点もいろいろ考えられます。 どの方法にしても、スクリプトではレイヤーの操作ができない以上、もとのムービークリップに手を加える手間は省けないと思います。