• ベストアンサー

ラジオボックスを使ったFLASH 変数の受け渡しについて

FLASH5で、スマートクリップのラジオボタンを使いまして選択型の変数の値をCGIにうけわたしたいのですが、うまくゆかず、悩んでおります。 ・ラジオボタンと、送信ボタンを準備しました。 ・ラジオボタンの_name を それぞれr_01、r_02、r_03とし、チェックが入ったときに、変数icon="a" "b" "c"が入るようにしたい 送信ボタンに on (release) {      if(r_01 == true) { icon = "a";}      if(r_02 == true) { icon = "b";}      if(r_03 == true) { icon = "c";} } on (release) { mode = "write"; resid = resid; getURL (script, "_self", "POST"); } on (rollOver) { tellTarget ("write") { gotoAndPlay ("over"); } } on (rollOut) { tellTarget ("write") { gotoAndPlay ("out"); } } on (press) { tellTarget ("write") { gotoAndPlay ("press"); } } アクションスクリプトはかじりたてで、初歩的なミスがあるかと思います。どなたか教えていただければ幸いです。

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

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

スマートクリップとはパラメータを持っているムービークリップのことで、現在主流になっている Flash MX 2004 やその1世代前の Flash MX にある、”コンポーネント”と呼ばれるものの祖先にあたります。 パラメータは「クリップパラメータ」というパネルで編集できます。 スマートクリップは、このパネルで編集したパラメータがムービークリップの持つ変数に設定され、その値に応じて動作や表示が変化する仕組みになっています。 MX 2004 や MX のコンポーネントでは、例えばラジオボタンなら、選択されているボタンを知らせてくれるなどの、制御用のスクリプトが一緒に提供されています。 しかし、Flash 5 のスマートクリップではそうしたスクリプトは用意されていませんので、直接パラメータを見て、どれが選択されているかを調べる処理を自前で用意しなければなりません。 ラジオボタンのスマートクリップが持っているパラメータはいくつかありますが、今回はこの中の「 checked 」というパラメータを扱います。 checked パラメータは、選択されたラジオボタンのみ true、それ以外のラジオボタンでは false になります。 ムービークリップが持っている変数もそうですが、スマートクリップのパラメータは、普通は  スマートクリップのインスタンス名.パラメータ名 で参照できますが、ラジオボタンの checked パラメータに関しては、諸事情により  ラジオボタンのインスタンス名.child.checked このようにして参照します。 (ラジオボタンの場合、インスタンス名とは「クリップパラメータ」のパネルの _name で付けた名前のことです) ----------------------- Flash 5 では、CGIに変数を渡す時は getURL を使います。 getURL は、これを実行した階層にある変数全てを送信する仕様になっています。 例えば、ステージに置いたボタンで getURL を実行すると、_root 階層にある変数全てがCGIに送信されることになります。 とりあえず、ラジオボタンと「送信」ボタンがともにステージにある場合、「送信」ボタンを押した時にCGIに情報を送信するスクリプトをご紹介します。 このスクリプトは「送信」ボタンに設定してください。 (↓コピーする際は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)  on(release)  {   //選択されているボタンに応じてiconの値を設定   if( r_01.child.checked == true )   {    icon = "a";   }   else if( r_02.child.checked == true )   {    icon = "b";   }   else if( r_03.child.checked == true )   {    icon = "c";   }   //情報を送信   getURL( "***.cgi" , "_self" , "POST" );  } ちなみに、icon の値を a などではなく 1 や 2 といった数字で送信する設計にしますと、  on(release)  {   //選択されているボタンに応じてiconの値を設定   icon = 0;   for( i = 1 ; ( i <= 3 ) && ( icon == 0 ) ; i++ )   {    //選択されたボタンの番号を記録    if( _root[ "r_0" + i ].child.checked == true )    {     icon = i;    }   }   //情報を送信   getURL( "***.cgi" , "_self" , "POST" );  } このようにスッキリとまとめることもできます。 CGIに情報を送る際は、変数の名前にご注意ください。 CGI側で要求している変数が、例えば icon_no などなら、送る Flash の方でも、変数は icon_no という名前にしなければ、CGIに情報が渡らなくなってしまいます。 ----------------------- ところで、tellTarget ですが。 Flash 5 ではこれは使用禁止になっていて、代わりに with というアクションの使用が推奨されています。 おそらく、マウスカーソルが重なった時やクリックされた時に「送信」ボタンの外観を変えたい、といったことではないでしょうか。 この場合は、ボタンシンボルが持っているフレームを使うと簡単です。 まず、ボタンシンボルの編集画面を開いてください。ステージに配置したボタンでしたら、ボタンをダブルクリックしても開くことができます。 ボタンシンボルは、「アップ」「オーバー」「ダウン」「ヒット」という4つのフレームからできています。  ・アップ   何の操作もされていない状態の、ボタンの外観を定義します。  ・オーバー   マウスカーソルが重なった時の、ボタンの外観です。  ・ダウン   クリックした時の、ボタンの外観です。  ・ヒット   マウスが反応する領域を定義します。ムービーでは表示されません。 ボタンシンボルのフレームも、普通のタイムラインと同様にキーフレームを設定して描画します。レイヤーを増やして絵を重ねたり、特定のフレームにムービークリップを挿入して、動くボタンにすることもできます。 ボタンシンボルは、ユーザーのマウスの操作に応じて自動的に該当するフレームに切り替えてくれます。 ただ色が変わったり、ちょっと動いたりする程度のボタンならば、ムービークリップとして作り、スクリプトで制御するよりも、最初からボタンとして作った方が分かりやすいと思います。 ただ、ロールアウトのフレームはボタンシンボルにはないので、マウスカーソルが離れた時に、何か視覚的な演出があるボタンは、ムービークリップを利用して作るしかありません。 ロールアウトの時に通常の外観に戻したいだけなら、ボタンシンボルでも充分です。 長くなってすみませんでした。 不明な点がありましたら、補足してください。

kayo2222
質問者

お礼

DPEさま、解答、ありがとうございました。 先に結果を申しますと、ご教授のとおりにやってみましたところ、正常に動作いたしました! ここ数日、寝る間もおしんでのああでもないこうでもな状態だったので・・・、感動もひとしおでした。 DPEさまの知識とご親切に感謝いたします。 ほんとうにありがとうございました。 ラジオボタンのインスタンス名.child.checked などとは・・・、わたしには思いもよらないことでした。 きっと、ご教授いただけなければ、おそらく今も路頭に迷っていたことでしょう・・・。 icon の値を 1 や 2 といった数字で送信する方法もぜひやってみたいと思います。 おっしゃるとおり、こっちの方がすっきりしていますね。 今回はまわりにFLASH5の本がなく、MX2004の本を見ながらの試行錯誤だったので本当に助かりました。 FLASHはバージョンによっていろいろ違うところもおおいのですね。 初心者のくせに、身の程しらずにも難しいものに手を出して、お手を患わせてしまいましたが、おかげさまでFLASHやCGIについて、勉強になりました。 今回のことを生かして、自分でアクションを書けるようになりたいです。

その他の回答 (1)

  • rightegg
  • ベストアンサー率41% (1357/3236)
回答No.1

こんにちは。 これ全部ひとつのボタンに書き込んでるんですか? これだと、ロールオーバーしたらoverに飛んでますから、それ以降のスクリプトは働きません。 ラジオボタンからの変数入力は別でやっておきましょう。 またロールオーバー等の動きも別で。 ボタンには送信部分だけあれば充分です。

kayo2222
質問者

お礼

righteggさま、迅速な解答をありがとうございました。 ロールオーバーしたらoverに・・・ の部分にはっとさせられました。 ご指摘いただいて、いろいろ書籍などもあたり、勉強するきっかけをいただきました。 お返事をいただいたときは、袋小路に入ったような状態で・・・ほんとうに困っておりましたので、方向性を持たせていただいて感謝しております。 本当にありがとうございました!

関連するQ&A

  • FLASHのボタンの動作(他のボタンにロールオーバーしたら…)

    AというボタンとBというボタンがあります。 Aには on (rollover) { this.gotoAndPlay(2); } on(rollout){ this.gotoandplay(6); } というアクションがついていますが、 「rollout」ではなくて、「Bのボタンにrolloverしたら」というように変えたいのですが、 どのように記述したらよろしいでしょうか? よろしくお願いします。

  • 変数が渡らない

    選択するための3つのボタンを作成し、それぞれ変数ansに値を格納しました。下記がそのActionScriptの例です。 ------------------------------- on(release){ ans=1; _root.nextFrame(); } ------------------------------- ボタンを押した後、別のレイヤーのフレームからMCを読み込みます。 しかし、ボタン内で格納した変数が読み込まれずundefined(未定義)となってしまいます。if文で分岐したいのですが出来ずに困っています。 ボタンをクリックすることで変数に格納した値を、ムービークリップのイベント内で読み込むことは可能でしょうか?

    • ベストアンサー
    • Flash
  • VB2008のラジオボタンについて教えて下さい。

    VB2008で開発をしています。 フォーム上にラジオボタンを3つ配置し、グループ化しています。  ラジオボタン1: radioBut0  ラジオボタン2: radioBut1  ラジオボタン3: radioBut2  グループボックス : GroupBox1 これらのラジオボタンのどれを True にするかを、変数 i で与えます。 Dim i AS Integer  i = 0 の時、radioBut0 を True にします。  i = 1 の時、radioBut1 を True にします。  i = 2 の時、radioBut2 を True にします。 これを、IF文を使わずに、簡潔にコーディングする方法がありますでしょうか。 おわかりの方、教えて下さい。 よろしくお願いします。

  • ボタンrolloverで画像を変えたいのですが。

    ステージには3個のボタンと4つのMCがあります。 基本となるMCを「MC1」とします。 動画のスタート時は3個のボタンと「MC1」だけが画面に見えています。 3個それぞれのボタンをrolloverでそれぞれに対応する3つのMCに変わり、各ボタンがrolloutした時には、「MC1」に戻る。と、いうアクションスクリプトを書きたいのですが、rolloutした時にどうしても「MC1」に戻ることができません。 on(rollOver){ _root.xxx._visible=true; } on(rollOut){ _root.xxx._visible=false; _root.MC1._visible=true; } 以上をボタンのアクションにそれぞれ書いたのですが、 動きませんでした。 Flash初心者で本で調べたり、ネットでかなり調べたのですが アクションスクリプトの基本がわからず、書き方がわからなくなっております。宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 【FLASHLite】ボタンが上手く動きません。

    FLASHCS3で携帯用コンテンツを作っています。 ボタンを上下キーで選択して 決定キーを押すと、 以下のように指定したフレームまで飛ぶようにしてあります。 *1つめのボタン on (keyPress "<Enter>") { gotoAndPlay (19); } *2つめのボタン on (keyPress "<Enter>") { gotoAndPlay (41); } *3つめのボタン on (keyPress "<Enter>") { tellTarget ("/") { gotoAndPlay (6); } } しかし、2つめのボタンを押しても、3つめのボタンを押しても、 1つめのボタンと同じ19フレームに飛んでしまいます。 説明が下手ですみません。 どうしたら、それぞれのボタンが上手く機能するのでしょうか? 教えて下さい! よろしくお願いします。

  • ボタンによるメニューリストの出現方法を教えてください。

    Flash MX初心者です。 http://weathernews.jp/index.html 上記のサイトにある、「AllChannel」のようにボタンをクリックすると画面の一番上面にサイトメニューが出てくるような仕組みはどういうアクションスクリプトを加えればよろしいのでしょうか?呼び出したいレイヤーをシーンの上のほうに持ってきて、そのレイヤーの中にムービークリップを作りボタンの中に下記のようなアクションで出来るのかなぁと思っているのですが… on (release) { tellTarget ("ムービークリップインタンス名") { gotoAndPlay("フレーム名"); } } 素人ゆえにどう説明していいのか分かりませんがこの内容でもし理解できるのであればぜひ良きアドバイスをお願いします。

    • ベストアンサー
    • Flash
  • 変数使い方?(> <)

    アクションスクリプト初心者です。 変数iに0を代入して、ムービークリップをクリックされるたびに1ずつ増やしていき、1回目にクリックしたときと2回目にクリックしたときに異なる処理を行いたいと思っております。 一回目の処理はうまくいくのですが、2回目の処理はうまくいかず、1回目と同じ処理になります。 対処法を教えてください!お願いしますM(_ _)M onClipEvent (enterFrame){ i=0; } on(release){ i++; if(i==1){ getURL("http://www.yahoo.co.jp") } if(i==2){ getURL("http://www.google.co.jp") } }

    • ベストアンサー
    • Flash
  • Flashでのラジオボタン

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

  • 初歩的ですみません。シーンについて。

    こんばんわ。 FLASH暦はそこそこなのですが、AS暦はゼロに等しいです>< FLASHの中にA,B,の2つのボタンがあります。 Aを押したら、シーン2に飛ぶようにして Bを押したら、シーン3に飛ぶようにしたいのですが、 下記の通り打ち込んでもうまくいきませんでした。 Aのシンボル(ボタン)に on(release){ gotoAndPlay("シーン2","1"); } と、打ち込んでも、なんだか、うまくいきませんでした。。。 on (release) { nextScene(); } と打ち込むと、シーン2には飛ぶのですが、そうすると、シーン1にボタンがひとつしか作れなくなります。。。 ※2つともスクリプトエラーはでませんでした。 つまり、シーン1からシーン3に飛ぶ手段がなくなると思います。。。 どなたか、解決方法をよろしくお願いします。

    • ベストアンサー
    • Flash
  • マウスポインタを変化させない方法

    50も半ば過ぎの初心者です。 Flash8で、jpg画像の上にムービークリップ及びボタンを配置、   on (rollOver) { gotoAndPlay("s1"); } on (releaseOutside, rollOut) { gotoAndPlay("s2"); } で、画像へのマウスポインタの乗り降りでムービークリップの制御をしました。 このとき、画像にマウスポインタが乗ると形状がデフォルトの"矢印"から"手"に変りますが、これをデフォルトのまま変化させない方法を教えてください。 on (rollOver) { Mouse.hide(); gotoAndPlay("s1"); } on (releaseOutside, rollOut) { Mouse.show(); gotoAndPlay("s2"); } で、画像にマウスポインタが乗ると消えるようにはできたのですが、クリックしても何も起こらない"ボタン"なので、"矢印"のままにしておきたいのです。 よろしくご指導ください。

    • ベストアンサー
    • Flash