クイズ問題をテキスト・ファイルから読み込むムービー
図1は最近流行りの診断系クイズのムービーです。三択クイズの問題は,外部のテキスト・ファイルで読み込めるようにしてみました。
図1:テキスト・ファイルを読み込むムービー(クリックするとムービーを表示します。ファイル一式はこちらからダウンロードできます)
問題文用のテキスト・ファイルは,タブ区切り形式で記述してあります。実はこのファイル,Excelで問題文と回答を作成して,[ファイル]-[名前を付けて保存]で「テキスト(タブ区切り)(*.txt)」形式で保存したファイルなのです(図2)。
図2:ファイル構成
問題文を管理しているExcelのシートは,図3のようになっています。
図3:問題文を管理しているExcelのシート(クリックすると拡大表示します)
クイズ形式のコンテンツの問題文を作成するのには,表計算ソフトを使ったほうが見やすく,管理もしやすいですよね。ほとんどの表計算ソフトは,標準でタブ区切りやカンマ区切りのテキスト・ファイルに書き出す機能を備えていますので,これを読み込むことができれば,問題作りも非常に簡単です。他の人に問題作りを全部任せてしまうことだってできます。分業ばんざい!!
さて,問題を作成しやすいのは良いのですが,ここで問題になってくるのが,タブ区切り,あるいはカンマ区切りなどのテキスト・ファイルを書き出したときに,Flashムービー側でそれをどう読み込み,意図したようなデータとして扱うのか,といった方法です。
前回ご紹介した方法では,「変数名=値」という形式のテキスト・ファイルしか読み込んで利用することしかできませんでした。そこで今回は,読み込んだデータを自分で字句解析して利用する方法をご紹介します。
onDataイベントハンドラを利用する
外部のテキスト・ファイルを読み込むには,LoadVarsクラスを利用する事は前回もご紹介しました。今回もやはり,このLoadVarsクラスを利用してテキスト・ファイルを読み込みます。前回とちょっと違うのは,「onLoadイベントハンドラ」を利用する代わりに「onDataイベントハンドラ」を利用するという点です(表1)。
イベント ハンドラ | 説明 |
---|---|
onLoad | 読み込みが完了し,既定の解析が終わったときに実行したい処理を割り当てる |
onData | 読み込み完了後,既定の解析処理を行わずに,自分でデータの解析処理を行いたいときに割り当てる |
onHTTPStatus | 読み込み時にサーバーからHTTPステータスコードを受け取った際に実行したい処理を割り当てる |
基本的な流れとしては,
- LoadVarsクラスのインスタンスを生成
- 読み込んだあとの処理を作成(onDataイベントハンドラの設定)
- 読み込み
コードで書いてみると,
var textReaderLV:LoadVars = new LoadVars; textReaderLV.onData = function(data){ //引数dataに渡されたテキストの解析処理 }; textReaderLV.load(テキスト・ファイルへのパス);が基本的な流れとなります。onLoadイベントハンドラのときとよく似ていますね。
ここで注目していただきたいのは,onDataイベントハンドラに割り当てられたイベントハンドラ・メソッドの引数です。実はonDataイベントハンドラは,引数として,読み込んだテキスト・ファイルの内容をそのまま渡します。この仕組みを利用して,自前の字句解析処理を作成すれば,タブ区切りやカンマ区切り等の形式のデータでも,自由自在に加工することができるというわけです。
タブ区切りのテキスト・ファイルを解析する
では,実際にタブ区切りのテキスト・ファイルを読み込んで解析してみましょう。新規Flashドキュメントを作成し,任意のフォルダに名前を付けて保存します。同じフォルダ内にタブ区切りのテキスト・ファイル「data.txt」を作成します。