TOP サイトマップ タイピングゲームを作る講座 ゲーム DIABLO
チャット BBS リンク集 顔文字 逆アクセスランキング

Flashでタイピングゲームを作ろう講座3−2
〜クッキーを使用してユーザーの成績を記録する〜

完成例

3-2-1.はじめに

さて、今回からFlashとCGIとの連携を使った処理が出てきます。
CGIがわからないと意味不明となりますが・・・、わたしもCGIはあまり詳しくはないので、 使うものだけを使っています。
なのでCGIのプログラムを使って起きた不利益には一切わたしは責任を持てません・・。
ローカル上でCGIプログラムのテストはやってますが、何か不具合がある時は掲示板で教えてもらえると 助かります。

さて、FlashとCGIの連携を使うと、チャットや掲示板などが作れたりします。 データの保存、ランキングシステムが作れるようになり、Flashで作れる物の幅が広がります。
今回は、CGI部分でクッキーの設定と参照をして、そのクッキーデータから得た得点を、 ランキングにしてFlash側に返すという処理をします。
Flash側で行うことは、データをCGIプログラムに送るという処理とCGIで処理したデータを Flash側で表示ということだけです。

注: クッキーを使ってユーザーの情報をローカルに保存する場合、ユーザーによって、得点結果を 書き換えたりすることができます。
なので、それぞれのクッキーに保存されている最高得点をみんなのランキングにそのまま 送ることは避けます。みんなのランキング(次回講座)ではクッキーでの結果(個々のランキング) とは別なプログラム(Flash側ではあまり変更点はありません)で 処理します。

今回はjcode.pl(CGIプログラムで使っている)はCGIプログラムと一緒には配布してませんので、 ご自分で手に入れてください。(わたしっていじわる・・・)

なお今回名前も入力してもらうことになってますが、結局同じ名前しか表示されませんので、 意味がありません(^▽^;)。 個々のランキングをもっと表示させたいという場合はCGIプログラム部分の修正が必要になってきます。 FlashとCGIとの送信で『POST』メソッドを使用してますが、『GET』だと送る量が多くなると 情報が転送できなかったりしますので・・・、GETとPOSTの違いについては、CGI講座など 他サイトを見て確認してくださいね。

3-2-2.Flash側でやる事

さきほど述べたように、Flash側でやるべき事は、CGIプログラムにデータの送信と CGIプログラムから送られてきたデータの表示です。
クッキーがない時とクッキーがすでにある時に処理を分ける様にしてますが、 その『ある、なし』を判定するのもCGIプログラム側です。 ただ、その指令を出すのはFlash側でやってます。

FlashではCGIプログラムに『この人クッキー持ってるかい?』と聞いたら、 CGIプログラムが『持ってる、持ってない』を返答してくれます。
それを受けて、Flash側ではクッキーを取得してない人には名前を入力してもらう。 クッキーを取得している人には成績を見せるということをさせます。

その為に『Flashでデータのロードが終わるまでの表示テキスト』、 『成績を見にいくボタン』、『名前を入力しにいくボタン』をムービークリップとして 作成しています。

そのムービークリップ内のどの位置へ行くかは、結果表示しているインスタンスに設定している スクリプトから指令を送っています。

FlashからCGIへのデータの送信もこの結果表示をしているインスタンスに設定している スクリプトから送っていますが、送ったデータをCGIプログラムで処理して、Flashでまたロードする ということはどうやればできるのでしょうか?それは

this.loadVariables("CGIプログラムがあるアドレス","POST")

を使います。
Flash→CGI→Flashとデータのやりとりをする方法はいくつかありますが(結構こんがらがる・・) 今回はこれを使います。
まず現在そのスクリプトが書かれているインスタンス内にあるグローバル変数をCGIプログラムに POSTメソッドでデータ送信し、それをまたそのスクリプトが書かれているインスタンスの 変数へとデータを送信しているという意味です。
なぜそのインスタンス内のグローバル変数へデータを上書きしているかというと、
データの受信が終わった時点で次の行動を起こしたいが為です。

onClipEvent(data){}というアクションはデータの受信が終わった時に発生するアクションなので、 このアクション内に、さきほどのボタンなどを含んだインスタンスへ振り分け処理の結果を 送信しています。

onClipEvent(data){}内では、受け取ったデータをそのインスタンスが持っていますので、あとでそのデータを 使いやすいように_rootにそのデータを入れておきます。

なお、onClipEvent(data){}アクションはインスタンスにしか設定できないので、こういう風に、 そのインスタンスにデータを受信しないとできないのです・・

今回Flash側の解説はこれだけにしておきます・・。プログラムの解説を詳しくしていると、 日が暮れてしまうので(T-T) ウルウル
わからないところは、気軽に『質問掲示板』を使ってください。
今ならマンツーマンで教えられます(゜m゜*)プッ

3-2-3.CGI側でやる事

CGIプログラムの解説はここでは行いません、掲示板での質問には応じますけど。
FlashからCGIへのデータの送信時に何をやらせたいか?ということを一緒にFlash側から データとして送信しています。

1.クッキーを取得しているかいないか?クッキーを取得していたらランキング作成の処理、 これをさせる時にFlash側で変数『shori』に"check"という文字を入れて送信しています。
2.名前を入力した時、Flash側で変数『shori』に"input"という文字を入れて送信しています。

プログラムの解説はしませんが、大まかにCGIでやっていること。
それは、クッキーの有無、Flashから送られてきた得点とクッキーのデータをランキング化、 クッキーの設定、です。

3-2-4.完成

今回の講座終了です。
講座部分がだいぶ短くなりました。
すごく細かく解説すればいいんでしょうけど、やる事が増えれば増えるだけ 説明も難しくなるので・・・、掲示板を使って質問してもらった方がいいと思いますしね。

あ・・別に掲示板を使えってことじゃないですよ、ぜひ使っておくんなましということです(謎)
さて次回は
3-3.CGIを使ってランキングシステムを搭載
です。これはすでにわたしのゲームにも搭載してますから、今回のような苦労は ないかと思いますが・・・、Flash側ってさらにやることほとんどないし・・・。

次回の講座が終わればもうオンラインのタイピングゲームでランキングシステム搭載のものを 公開できるわけです。早かったな)゜0゜( ヒィィ

3-2-5.flaファイルのダウンロード

今回の講座ではFlashファイル(.flaファイル)とCGIプログラム(.cgiファイル)を 配布してますが、CGIプログラムで使用しているjcode.plは入ってませんので、どこからか 手に入れてください。じゃないとCGIプログラムが動きません(たぶん)。

講座1−1ダウンロード

lzhで圧縮してあります。

前に戻る 講座のTOPへ戻る 次に進む