ゲームを作ってみよう 〜その6〜
第6回『外部ファイルを読み込ませてみよう』
今回はバウンスショットの核となる外部ファイルの読み込みを書こうと思います。
さて、外部ファイルといっても無制限に読み込める分けでもありません。
FlashにはFlashの作法って物があります。
ってなわけですがその全てを知る必要は無いですし、そもそも知らん。でも、これを知っておけば役に立つって物を紹介しつつ使います。
第5回『ゲーム制作のためのツールを作る。・・・・いやじゃ!』でCSVファイルを使うことにしたと書きましたが、そもそも、このCSVってなんでしょ?
CSVは Comma Separated Values の略でして、要は、カンマ( , )で区切られたデータファイルのことです。たとえば
2,345,6,123,5,3456,7、”ぼくドラざえもん”,1192
こんな感じでカンマ( , )で区切られたデータをひとつの単位として扱います。こういうもののデータ作成は簡単でして、MicroSoft Excel や OpenCalc 等で容易に作ることが出来ます。
ちなみにワシが使ってるのは OpenCalc。これはOpen Officeというフリーの統合オフィスソフト内の1アプリで、まぁExcelと似たような物だと思ってもらえれば結構です。
前回ちろっと書きましたね。
さて、本題に戻ってこのcsvファイル、どうやってFlash上に読み込むかと言うのが今回の趣旨でして、そのために使うのが
LoadVars
というクラスになります。このクラスがどんな物なのかを詳しくしりたければHELPを見てください、
ですがまぁ詳しく知るのはこのクラスを好きになってからで良いと思います。
ではテストプログラムを作りましょう。
先ず読み込むためのcsvファイルが必要です。本当はOpenCalcを使ってちゃんとしたデータを書きたい所ですが、最初は根本の基礎を知るのが大切ですよね。そんなわけでテキストエディッタ(Windowsであれば標準でメモ帳ってソフトが付いてきてます)を開いて、
1,2,3,4,5
と書き込んだ後に、data.csvと言うファイル名で保存すればcsvファイルの作成は終了です。簡単だね。
ではFlash側のスクリプト、今回はテストなので外部クラスは作らずに直接アクションフレームに書き込みます。
1: var textCsv:LoadVars = new LoadVars;
2: textCsv.onData = function(data){
3: var itemList:Array = data.split(”,”);
4: trace(itemList[3]);
5: }
6: textCsv.load(”data.csv”);
書き込みましたか?、コピペじゃ駄目よ。
このアクションスクリプトを書いたflaは先ほど作ったdata.csvと同じフォルダにおいてください。
それと当然ですがプログラムの最初にある「1:」等は行番号を意味してますので、そこまで書いて動かないとか言わないように。
ついでに、なぜ行番号を付けたかと書くと、説明しやすくするためと、コピペが出来ないように。
何といっても自分で書かないと、いや、ここでは打ち込まないとと書くべきですか。
なにはともあれ頭に叩き込むには手を動かすのが一番です。
さてパブリッシュしてみましょう、出力ウィンドウに4と出たら成功です。
失敗してる人は何かが間違ってるので、最初からよく読みなおして、自分が作ったものと、ここに書いてあるものを見比べましょう。
では説明と行きます。
1行目でtextCsvというLoadVarsクラスを生成しています。LoadVarsクラスとはどういう物かと書くと、・・・と思ったんですが一言じゃ表せないんでHELPを引用してみます。
LoadVars クラスを使用すると、データのロードが成功したかどうかを確認することや、ダウンロードの進行状況を監視できます。
loadVariables() 関数の代わりに LoadVars クラスを使用して、Flash アプリケーションとサーバーの間で変数を転送できます。
とまぁ、色々仕事してくれます、その上
具体的には、LoadVars クラスはオブジェクト内のすべての変数を指定の URL に送ったり、指定された URL にあるすべての変数をオブジェクトにロードしたりできます。
また、すべての変数ではなく特定の変数を送信することもできるので、アプリケーションの効率が向上します。
LoadVars.onLoad ハンドラを使用すると、(データがロードされる前ではなく) データがロードされるときにアプリケーションが実行されるようにすることができます。
こんな感じなんで、一言じゃ書けないんですな。でも誤解を恐れずに書けば外部データを読み込む時に使うでも嘘じゃ無いです。
さてそのLoadVarsを使って読み込むのが6行目。これは見て分かるとおりLoadVarsクラスのloadを使って先ほど作ったcsvファイルを読み込むとしています。
今度は行数を戻って2行目、ここは何かと書くと、6行目で指定したデータの読み込みが終了したら呼ばれる所になります。
しかし、読み込み命令より先にこんな命令を書いて大丈夫なんかいと心配になりませんか?。
ワシはなりました。
ですが、よくみればこいつはfunctionであって、その場で実行される物じゃ無く、呼ばれて初めて実行される物ってのがわかります。つまり6行目の命令が動き出して、終了すると2行目を呼び出すってわけです。
またこの書き順には意味がありまして、もしload命令を2行目より先に書いてた場合、時と場合によっては2行目の命令が生成される前にLoadが終了してしまう事があり、2行目が呼び出されない可能性があるそうなんです。
まどろっこしいですな。とは言え見過ごしやすい場所なんで注意です。
さて2行目~5行目にかけては、当然ロード終了後の話です。
まず2行目のfunction(data)に注目。
これはload命令が終了した時に呼ばれると何度も書いてますが、そのload命令が取得したものを、このdataってやつに入れ込んでくれてます。
当然取得したものは、data.csv、もっと書けば1,2,3,4,5と書かれた「文字データ」です。
当然ですが、数字も文字として取得するので注意です。
次に3行目、data.split(”,”)。splitってやつは文字データを指定のデータで区切って分けてくれる便利な命令です。
3行目では区切りったデータをArrayに返してます。
今回はカンマ「,」を指定しているので、1と2と3と4と5と言う5つの文字データを作り、順番に配列に入れています。
この区切りに使ったデータの(”、”)は区切ったデータには入りません。
要は1,と2,と3,と4,と5みたいなデータでは無いって事です。
4行目はもう分かりますな、単純に取り込んだデータをカンマで区切って、その4番目(0から数えるので)のデータを表示しろとしているだけです。
当然先にも書いたように4がでるわけです。
これで外部データの取り込みの基礎は終わりです。
とりあえず、data.csv側のデータを色々変えてみてどうなるか試してみると良いと思います。
重要なのは Flashは簡単にテキストファイルを読み込める の一点です。
知ってしまえば簡単ですな。
関連ページ
- 第1回『ゲーム製作の流れ、一から見せます』
- 第2回『企画内容を吟味しよう』
- 第3回『仕様を詰めておこう』
- 第4回『では、仕様書をまとめましょうか』
- 第5回『ゲーム制作のためのツールを作る。・・・・いやじゃ!』
ここまで出てきた資料
トラックバック URL :





Thanks!,
コメント by Yapyvrdu — 2008/12/14 日曜日 @ 2:59:49