- ベストアンサー
ラジオボックスを使った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"); } } アクションスクリプトはかじりたてで、初歩的なミスがあるかと思います。どなたか教えていただければ幸いです。
- みんなの回答 (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つのフレームからできています。 ・アップ 何の操作もされていない状態の、ボタンの外観を定義します。 ・オーバー マウスカーソルが重なった時の、ボタンの外観です。 ・ダウン クリックした時の、ボタンの外観です。 ・ヒット マウスが反応する領域を定義します。ムービーでは表示されません。 ボタンシンボルのフレームも、普通のタイムラインと同様にキーフレームを設定して描画します。レイヤーを増やして絵を重ねたり、特定のフレームにムービークリップを挿入して、動くボタンにすることもできます。 ボタンシンボルは、ユーザーのマウスの操作に応じて自動的に該当するフレームに切り替えてくれます。 ただ色が変わったり、ちょっと動いたりする程度のボタンならば、ムービークリップとして作り、スクリプトで制御するよりも、最初からボタンとして作った方が分かりやすいと思います。 ただ、ロールアウトのフレームはボタンシンボルにはないので、マウスカーソルが離れた時に、何か視覚的な演出があるボタンは、ムービークリップを利用して作るしかありません。 ロールアウトの時に通常の外観に戻したいだけなら、ボタンシンボルでも充分です。 長くなってすみませんでした。 不明な点がありましたら、補足してください。
その他の回答 (1)
- rightegg
- ベストアンサー率41% (1357/3236)
こんにちは。 これ全部ひとつのボタンに書き込んでるんですか? これだと、ロールオーバーしたらoverに飛んでますから、それ以降のスクリプトは働きません。 ラジオボタンからの変数入力は別でやっておきましょう。 またロールオーバー等の動きも別で。 ボタンには送信部分だけあれば充分です。
お礼
righteggさま、迅速な解答をありがとうございました。 ロールオーバーしたらoverに・・・ の部分にはっとさせられました。 ご指摘いただいて、いろいろ書籍などもあたり、勉強するきっかけをいただきました。 お返事をいただいたときは、袋小路に入ったような状態で・・・ほんとうに困っておりましたので、方向性を持たせていただいて感謝しております。 本当にありがとうございました!
お礼
DPEさま、解答、ありがとうございました。 先に結果を申しますと、ご教授のとおりにやってみましたところ、正常に動作いたしました! ここ数日、寝る間もおしんでのああでもないこうでもな状態だったので・・・、感動もひとしおでした。 DPEさまの知識とご親切に感謝いたします。 ほんとうにありがとうございました。 ラジオボタンのインスタンス名.child.checked などとは・・・、わたしには思いもよらないことでした。 きっと、ご教授いただけなければ、おそらく今も路頭に迷っていたことでしょう・・・。 icon の値を 1 や 2 といった数字で送信する方法もぜひやってみたいと思います。 おっしゃるとおり、こっちの方がすっきりしていますね。 今回はまわりにFLASH5の本がなく、MX2004の本を見ながらの試行錯誤だったので本当に助かりました。 FLASHはバージョンによっていろいろ違うところもおおいのですね。 初心者のくせに、身の程しらずにも難しいものに手を出して、お手を患わせてしまいましたが、おかげさまでFLASHやCGIについて、勉強になりました。 今回のことを生かして、自分でアクションを書けるようになりたいです。