- 締切済み
FlashActionScriptバイブルを読破された方に質問です!3
一通りこの本を読破して自分なりに熟考してきたつもりなのですが、 最後のほうでつまずいた点がありましたので、 どうぞアドバイス御願い致します。 P.383の下のほうのスクリプト(チェックボックス内のムービークリップ内のフレーム1に記述)で、 function value(){ return Number(_currentframe==3); } というスクリプトがありますが、 この()内の、 _currentframe==3 の意味するもの、意図するものがどうもわかりません。 関数Numberをそもそもこれまで使ったことがなかったので、よくわからなかったのですが、 「文字列や、trueやfalseといったブール値を、数値に変換します」 とバイブル内でも定義されているので、 それを考えてみたのですが、 それでも _currentframe==3 の意味がよくわかりません。 またCGIについての質問になるかもしれませんが、 POSTとGETでの送信の違いがもう一つつかめません。 どのように解釈したら宜しいでしょうか? GETだと送信時にURLにそのまま情報が表示されるというのはわかるのですが。 具体的な質問は以上なのですが、 最後に、今後の勉強方法としてアドバイス願いたいのですが、 CGIとActionScriptを連携させていく上での勉強になるサイト、本等ございましたら教えていただけないでしょうか。CGIとFLASHの絡みがまだイメージしづらくて困っております。 どのように勉強したらいいのかが漠然としていまして、わかりませんので、どうぞ宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hokuto_ds
- ベストアンサー率45% (106/233)
これは、true/false(1/0)の判定式ですね。 385ページの下の「送信ボタンのスクリプト」でこのvalue値を取得(win=checkBox1.value())して、この三つのグローバル変数(win,mac,unix)をcgiにgetしています。 どういうふうにcgiに送られているかは、386ページのブラウザの画面にものっています(ここではwin=1&mac=1&unix=0)。 このラジオボタンは、「1フレーム=ノーチェック、3フレーム=チェック入り」の構成になっているので、「チェックが入っているかどうか?」を確認するためには「_currentframeは3なのかどうか?」を確認すればいいことになります。 そこで、順番としてはまず「_currentframe==3」で、それを判定します。この結果は「true/false」で返ってきます。その結果を「Number」関数で「1/0」にならし(これはcgiでおくりやすいからだと‥思う)ています。 ちょっと解説を入れてみると、 function value(){ return Number(_currentframe==3); } ↑まず、ここでフレームが3かどうかを「true/false」で判定する ↑その「ture/false」をNumber()関数で「1/0」に変換する ↑その「1/0」を return する の、三段階でこのvalueメソッドは動いています。 送信ボタンからこのメソッドを呼んで、戻ってきた「1/0」をcgiにgetしているわけですね。 これを処理するcgiがサーバーにあれば、getされた値に応じて、なんらかの反応をさせることができます。そこからはcgiの話になるのかな‥ 蛇足ですが、Number()の動きについては、新規ムービーにこういうスクリプトを書いてムービープレビューするとつかみやすいかもしれません。 f=3; trace(3==f); trace(Number(3==f)); 正直、CGIもperlも「今本を読んでるけどなんだかまだわからない」状態なので、ちょっと他人だのみなんですが‥‥ getとpostは送るデータ量の問題もありますし、getだとおっしゃられているように情報がURLに表示されるので、知られたくないものや操作されたくないものはpostで、ということになる。と、教えてもらいました。 私のperlの本には「getは単純にデータを取得し、postはサーバー上の情報を変更する」とあります。ので、サーバーに置かれたデータを変更したいとき(掲示板にあたらしい発言をくわえるとか?)はpostなのではないか‥‥と思っていますが、正直まだわかりません; とりあえず、自分は、現状「perlがわかったらもう少しなにかわかるかも」という盲打ちの状態で、「とりあえずperl」をしようかとperlの本など買ってみました。でも先が長そうです‥あまりこれといって「FLASHでCGIを使ってこれをやろう!」という目標がないせいかもしれませんが。ついでのようにXMLも勉強をはじめてみたのですが、これも同じ状態ですね。で、つい、最近はフレームアニメーションであそんでいます。 FLASHから送るデータといったら、やはりアンケートとか、通販のカートの内容や、ゲームの最高得点とかかな?とイメージはしてますが、まだいまいち‥‥受け取ったほうの処理を考えないといけませんしね。 と、いうわけで後半は完全に「自信なし」です。もうすこしまじめに勉強しようかとちょっと反省しましたが‥どうなることやら。 それにしてもついに読破されたようですね!おつかれさまでした!!
- misschoice
- ベストアンサー率50% (14/28)
ActionScriptバイブルは持っていないので、的外れだったらごめんなさい。 (私も勉強中です...(^_^;) (前半のご質問) 「==」は(比較)演算子の一つなので他の演算子と同じように演算結果を返します。 簡単な例を挙げると 1 + 3 → 結果は4 1 - 3 → 結果は-2 1 == 3 → 結果はfalse 1 < 3 → 結果はtrue ゆえに、書き換えると function value(){ if (_currentframe == 3) { return Number(true); } else { return Number(false); } } と同じ動作をすると思います。 (後半のご質問) GETとPOSTの違いは単に方式の違いと割り切って覚えてるだけなので うまく説明できるかわかりませんが... GETはおっしゃるとおりURLに情報を添付してCGIプログラムに送ります。 CGIプログラム側では環境変数QUERY_STRINGを参照することで情報を取得します。 送付する情報長には制限があります。 POSTの場合CGIプログラム側から見ると標準入力(STDIN)から情報を取得します。 情報長に制限はありません。情報長は環境変数CONTENT_LENGTHに格納されます。 GET、POSTどちらを使うかによりCGIプログラムの書き方が変わってきます。 また情報長が長い(たしか255バイト以上)場合はPOSTしか使えません。 FlashとCGIの連携に関してですが以下のサイトに実例が紹介されてます。 http://sideseven.at-mark.tv/ http://www.annie.ne.jp/~cgipal/html/flash_cgi.htm ご参考になればよいですが...
お礼
こんにちは。 回答ありがとうございました! 返信が送れて本当に申訳御座いません。 ここ数日間OSのバージョンアップとPCの拡張性アップを図ったがために、Flashに向き合える時間もほとんどありませんでした。本当に済みません。 misschoiceさんの説明で大切なことを思い出すことが できました。 比較演算子だったんですね。「==」は。 私の考え方では、 _currentframe==3 は、 「現在のフレームは3である」 と定義しているものだという解釈でした。 と、こんな覚え方は最初からしていただけではなくて、 途中どこかで狂ったようでして、 実際は、 「現在のフレームは3である、trueかfalseか」 でしたね。 そうするとその左側にあるNumberメソッドもつじつまが合いました。なるほどなるほどです。 というわけで、 function value(){ if (_currentframe == 3) { return Number(true); } else { return Number(false); } } もすんなりと理解できました。 ですが、自分でコーディングするときに、misschoiceさんの組みなおしてくれたスクリプトを思いつくか、 function value(){ Number(_currentframe==3); } というバイブルでのスクリプトを思いつくか、 どっちになるんでしょうね。 まだまだです、勉強あるのみです。 ところでCGIの件ですが、ご丁寧にリンク先まで教えてくださり、本当に有難う御座います。 フラッシュを駆使したかっこいい掲示板なんかをサラリと作りたいものです。 実はまだ本書内容でhokuto_dsさんに質問したい点がございますので、まだ質問を締め切ることができませんことをどうぞ御了承ください。 本当に有難う御座いました。
お礼
こんにちは。 三度目のお世話になります、hokutoさん。 本当に毎度毎度ご丁寧に回答してくださいまして、 有難う御座います!! また、返信が遅れまして本当に申訳御座いませんでした。 OSのバージョンアップ作業と、マシンのスペックアップを無謀にも図っているために、もうフラッシュどころではありませんでした。といっても言い訳をしているようにしか聞こえないので、本当に済みません。やっと腰をすえてflashと現在向き合っております。宜しく御願いします。 質問の回答についてですが、非常によく分かりました。 特に、 f=3; trace(3==f); trace(Number(3==f)); を実行してみたところ、物凄く意味が掴めました。 比較演算子==とNumberメソッドの意味がつかめました。 こうやって、今作っているムービーと違う場所で、 ある特定のメソッドについて検証するということは本当に大切ですよね。 実は、その次の章、セクション35の「ラジオボタンを作る」で再びつまづいてしまいました。このセクション非常に難しいです。 難解のネックはP389のスクリプトが全てという感じです。 『p389のスクリプト』 // 選択されたボタンの名前を格納するグローバル変数の定義 theValue = ""; // 全てのボタンを一回クリアし、クリックされたものだけをONにするメソッド function click (clickedBtn, theName) { if (!clickedBtn.value()) { for (pName in this) { var theObject = this[pName]; if (typeof (theObject) == "movieclip") { theObject.gotoAndStop(2); } } clickedBtn.gotoAndStop(3); theValue = theName; } } function value () { return theValue; } 『質問』 スクリプトの上のほうの部分で、 if(!clickBtn.value()) とありますが、 この!はNOT演算子というものらしいですが、 このスクリプトはわかりやすくいうとどういう意味になるのでしょう? 「もし、clickBtn.value()の値がtrueからfalseに入れ替わったら」という意味なのでしょうか。 if(clickBtn.value()) ならば、「もしclickBtn.value()がtrueならば」ということで分かるのですが・・。 次の質問は、 pNameはいくつあるのか?という点です。 そこで実験をしてみました。 for(pName in this){ var theObject=this[pName]; の二行の間に、 trace(this[pName]); としたところ、プレビューでラジオボタンをクリックすると出力で、6つの文字列が表示されましたが、 つまり、pNameには、6つの変数が格納されているという解釈で正しいでしょうか?この変数はデバッガで確認できるようですが、イマイチこのpNameの実態が把握できません。構造体の中の各々の変数だというのは分かっています。 最後にもう一点です。同じくP389のスクリプトです。 if (typeof (theObject) == "movieclip") { という一行がありますが、 typeofメソッドでなぜ、MovieClipがtrueでないと{}内のメソッドを実行しないようにしているのでしょうか? MovieClipでないとならない理由がわからないのです。 読破はなんとかしましたが、最後の最後にこんな部分で悩まされるというのは、本当に辛いです(^^; もちろん私もxmlはここで初めて仕組みを知ったという感じでこれからです。 本当にお世話になりっぱなしですが、 どうぞ、御願いします。