- ベストアンサー
任意入力させた文字の正否の問い方
FLASH MX2004において、問題文として表示させた文章を、漢字などの文字を正しく打ち込ませるというタイピングゲームを作っております。 おおよその外郭は出来たのですが、肝心の「任意で入力させたテキスト(漢字・ひらがな・カタカナなど)の正否を問うスクリプト」の組み方が分かりません。 アクションスクリプトの解説書も何冊か読んでは見たのですが、どのスクリプトを組み合わせればいいのか頭を悩ますばかりです。 FLASHに精通した方のお知恵を拝借できれば幸いです。 ヨロシクお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
文字列Aが文字列Bと一致しているかどうかは、 str_a == str_b このように、イコール( = )を2つつなげた演算子で判断できます。 例えば、 if( str_a == str_b ) { trace( "OK" ); } else { trace( "NG" ); } とすると、変数 str_a と str_b に同じ文字列が格納されていれば” OK ”、1文字でも違っている場合は” NG ”と、「出力」パネルに表示されます。 テキストを入力する部分には、「テキスト入力」に設定したテキストフィールドを置いているかと思います。 「変数」の項目に変数を指定しておくと、入力されたテキストはこの変数に格納されます。 例えば、変数を input とすると if( input == "出題文" ) { ・・・ } として照合できます。 また、テキストフィールドの内容を管理している、text というプロパティを見る方法もあります。 仮に、テキストフィールドのインスタンス名を” answer ”とすると、このテキストフィールドに表示される内容は answer.text として参照できます。 従って if( answer.text == "出題文" ) { ・・・ } としても、入力された文字と出題文を照合できます。 --------------------------------------------- あとは、ゲームの内容や処理にもよります。 例えば、入力される度に照合したい場合は、テキストフィールドの内容が更新されると発生する、onChanged というイベントハンドラを利用すると便利です。 テキストフィールドのインスタンスには、スクリプトを設定できません。このスクリプトはフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください) //テキストが入力される度に照合する answer.onChanged = function() { if( this.text == "出題文" ) { /*ここに、正解時の処理を書く*/ } else { /*ここに、不正解時の処理を書く*/ } }; onChanged は何か文字列が入力される度に発生するので、極端な話、Enter キーで改行を入れただけでも発生します。 出題文がいくつかの文節から成り立っている場合、単語や文節を1つずつ入力された時は、その時点でイベントが発生します。 onChanged を使う場合は、日本語変換を必要とする出題文の時は特に、正しい文字列を入力するまでは先に進めないといったスタイルのゲームになるかと思います。 他には、Key クラスで Enter キーの押下を検出し、Enter キーが押された時点で入力完了と見なして、出題文と照合するといったスクリプトも考えられます。 //リスナーオブジェクトの生成と登録 obj = new Object(); Key.addListener( obj ); //キーが押された時の処理を定義 obj.onKeyUp = function() { //直前に押されたキーがEnterキーだった場合、テキストを照合 if( Key.getCode() == Key.ENTER ) { if( answer.text == "出題文" ) { /*ここに、正解時の処理を書く*/ } else { /*ここに、不正解時の処理を書く*/ } } }; この方法ですと、1回でも Enter キーが押された時点で正しく入力されていれば先に進み、間違っていたら減点といった、テンポのいいゲームにもできます。 ただ、1文節ごとに変換・確定して入力することができなくなるため、日本語の出題文ではちょっと厳しいかもしれません。
その他の回答 (1)
単純にIF文で書くのではダメですか? if(入力した値==正解){正解} else{不正解}
お礼
ifを使った方法を、上のDPEさんのものとあわせまして制作してみます。 ありがとうございました。
お礼
返事がおそくなりまして申し訳ありません。 この週末にあわせて、お教え下さいました方法を煮詰めて、一度作ってみようと思います。 うまくいかなければ、その状況にあわせましてまたご教授いただければ幸いです。 ありがとうございました。