0

私は数学に基づいた小さな子供向けの教育用フラッシュゲームを作成しています。テキストボックスに印刷する質問であるas3を使用してテキストファイルから読み取り、ユーザーが入力して回答と比較できるようにしたいと考えています。また、そのファイル内で、ユーザーが正解を入力したことを確認します。そうでない場合は、ユーザーが回答する別の質問をロードします。

以前、Visual Basicでこの種のことを行って、ファイル内の単語が「=」で区切られたテキスト言語辞書を作成しました。プログラムにその文字で区切られていることを伝え、プログラムは2つの単語を出力しました。互いに一致する別々のテキストボックスに。例:「lol =LaughingOutLoud」はその1つでした。

たとえば「2x2=4」を1行に表示するテキストファイルを作成したい場合、ゲームはサインの左側をユーザーに印刷し、ユーザーの入力を次のコンテンツで確認できるようになります。答えが正しいことを確認するための標識の右側。

これがあまり混乱しないことを願っています。ファイルをテキストボックスに印刷しようとしましたが、ファイル全体ではなく質問だけを印刷する方法がわからないので、答えを確認してください。

私はAS3とフラッシュの初心者であり、これが私のスキルレベルにとって最高の実験である可能性があることを認めています。どんな助けでも大歓迎です。

4

3 に答える 3

3

Flashでより複雑なものから始めたい場合、方法を見つけるのは非常に難しい場合があります。ジョーダンが示唆したように、xmlは情報を要求するための最良の方法です。xmlファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<myList>
    <excercise>
        <question>What is 2 x 2?</question>
        <answer>4</answer>
    </excercise>
</myList>

(これをコピーしてメモ帳に貼り付け、.xmlとして保存できます)

フラッシュアクションスクリプトでは、このxmlに対応できるようにするためにいくつかの項目が必要になります。「Main.as」という名前の別のactionscriptファイルで次のテンプレートを使用します。

package 
{

    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.xml.*;
    import flash.events.Event;
    import flash.display.Loader;


    public class Main extends MovieClip
    {
        var myFile:String;
        var xmlLoader:URLLoader;
        var myList:XML;

        public function Main()
        {           
            myFile =  "myList.xml";
            loadXml();
        }
        function loadXml():void
        {
            xmlLoader = new URLLoader(new URLRequest(myFile));          
            xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);
        }
        function xmlLoaded(event:Event):void
        {
            myList = new XML(event.target.data);
            myList.ignoreWhite = true;
            //totalNr = myList.excercise.length(); = the amount of excercises in your file
            //var str:string = myList.excercise[0].question;
            //trace (str) would give you the text of the question of the first excercise
        }
    }

}

編集 ステージ上にテキストボックスを作成し、questionTxtという名前を付けたとします。そのテキストボックスに質問を追加するには、次のように言います。

questionTxt.text = myList.excercise[0].question;

その下に、生徒が回答を入力できる入力テキストフィールドを作成します。それをanswerTxtと呼びます。

また、チェックボタンを作成して、回答があったときに押すことができるようにします。それをcheckBtnと呼びます。

また、それらの入力をxmlの回答と比較する関数も必要になります。以下で対処します。

次に、次のようにイベントリスナーをcheckBtnに追加します。

checkBtn.addEventListener(MouseEvent.CLICK, checkAnswer)

そして、答えをチェックする関数(便利な名前はcheckAnswer):

function checkAnswer (event:MouseEvent) : void {
    if (answerTxt.text == myList.excercise[0].answer) {
        trace ("correct");
    } else {
        trace ("wrong");
    }
}

xml-dataを配列として扱います。最初の演習はmyList.excercise[0].questionとして検出され、2番目の演習はmyList.excercise[1].questionなどとして検出されます。

于 2012-06-18T08:52:53.083 に答える
1

xmlについて聞いたことがありますか?それはあなたがやろうとしていることに最適です。ロードについては、URLLoaderクラスとURLRequestクラスを使用してください。ロードされたデータを処理するには、oncompleteハンドラーが必要になります。私はそれを使用する方法のアイデアを得るためにas3でグーグルxmlをします。次に、Adobeヘルプドックを見て、読み込みを把握します。独学は学ぶための最良の方法なので、自分でそれを理解するために最善を尽くすことをお勧めしますが、問題がある場合はここで質問してください。私または他の誰かが詳細を理解するのを手伝ってくれます。

于 2012-06-18T05:34:57.847 に答える
0
package 
{
    import flash.display.*;
        import flash.net.*;
        import flash.xml.*;
    import flash.text.*;
    import flash.events.*;
    import org.casalib.util.ArrayUtil;

    public class Main extends MovieClip
    {
        var myFile:String;
        var xmlLoader:URLLoader;
        var myList:XML;
        var questionTxt:TextField = new TextField();
        var questionNumber:uint = 0;
        var correctNumber:uint = 0;     
        var correctAnswer:String;
        var randomAnswer:Array;
        const NUM_QUESTIONS:uint = 3;

        public function Main()
        {   
            right = new Sprite();
            addChild(right);

            myFile = "myList.xml";
            loadXml();
        }

        function loadXml():void
        {
            xmlLoader = new URLLoader(new URLRequest(myFile));          
            xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);
        }

        public function randomiseArray(answers:XMLList):Array {
            var rArray:Array = new Array();
            for (var i:uint = 0; i < NUM_QUESTIONS; i++) {
             rArray.push(answers[i]);
            }
            return ArrayUtil.randomize(rArray);
        }

        function nextQuest ():void {
            correctAnswer = myList.excercise[questionNumber].answer[0];
            randomAnswer = randomiseArray ( myList.excercise[questionNumber].answer.children() ); 

            questionTxt.type = "dynamic";
            questionTxt.width = 208; 
            questionTxt.height = 32;
            questionTxt.x = 196;
            questionTxt.y = 101;
            addChild(questionTxt);
            questionTxt.text = myList.excercise[questionNumber].question;

            for (var i:uint = 0; i < NUM_QUESTIONS; i++) {
            var answerTxt:TextField  = new TextField(randomAnswer[i]);
            answerTxt.type = "input";
            answerTxt.x = 196;
            answerTxt.y = 301;
            answerTxt.width = 208; 
            answerTxt.height = 32;
            answerTxt.background = true; 
            answerTxt.backgroundColor = 0xFFF00;   
            answerTxt.addEventListener(KeyboardEvent.KEY_UP, checkAnswer);
            addChild(answerTxt);        
            }
            }       

        function xmlLoaded(event:Event):void
        {
            myList = new XML(event.target.data);
            myList.ignoreWhite = true;
            totalNr = myList.excercise.length(); 
            nextQuest();
            }

        function checkAnswer (e:KeyboardEvent):void 
        {           

         while (right.numChildren) right.removeChildAt(0);

         if(correctAnswer == e.target.getChildAt(e.target.numChildren - 1).text) correctNumber++;

            if (questionNumber == myList.excercise.length()-1) {
                    trace ("wrong");
                    answerTxt.backgroundColor = 0xFF0000;
            }else{

                    trace ("correct");
                   answerTxt.backgroundColor = 0xFFF00;
                   correctNumber++;
                   nextQuest();
                  }  
            }           

        }

}

そのように行かないでください。正解へのチャレンジコードはanswerTxtで管理され、正しければ次の質問の直後に続きます。届かない実装方法。

于 2013-04-16T16:27:33.270 に答える