2012-06-18 35 views
0

我正在根據數學爲小的孩子製作教育Flash遊戲,我希望能夠從as3文本文件讀取,要打印的問題在文本框中,然後由用戶輸入並將其與該文件中的答案進行比較,以檢查用戶是否輸入了正確的答案,如果不加載用戶回答的另一個問題。ActionScript 3讀一個文本文件for equasion,檢查輸入與答案

在Visual Basic中,我曾經做過這樣的事情,要製作一個文本語言詞典,其中文件中的詞用'='分隔,我告訴程序他們被那個漢字分開了,程序將這兩個單詞打印在單獨的文本框中,彼此一致。如:「大聲笑=大聲笑」是其中之一。

我希望能夠在一行讀取例如「2x2 = 4」的文本文件,然後遊戲將能夠將標記的左側打印給用戶,然後檢查用戶的輸入在標誌右側的內容看到答案是正確的。

我希望這不是太混亂。我試圖將文件打印到文本框中,但不知道如何使它僅打印問題,而不是整個文件,然後檢查答案。

我是AS3和flash的初學者,並且已經承認這對我的技能水平來說可能是一個超級頂尖的實驗。 任何幫助表示讚賞。

回答

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)

Flash ActionScript中,您將需要一些項目,能夠解決這個XML。我使用一個單獨的ActionScript文件下面的模板,名爲「Main.as」:

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數據作爲一個數組。第一個鍛鍊; Tibial會被發現爲myList.excercise [0]。提問和第二會myList.excercise [1]。提問等

+0

或使用JSON! JSON現在是Flash 10的本機。 – ansiart

+0

謝謝,我已經設置了xml文件並且閃存跟蹤了這個問題,但是我不知道如何使問題節點的數據出現在文本框中 –

+0

我編輯了我的答案,希望能夠更多地解釋它。 – silvith

1

你聽說過xml嗎?這對你正在嘗試做的事情是完美的。至於加載,請使用URLLoader和URLRequest類。您需要一個完整的處理程序來處理加載後的數據。我會在as3中使用Google xml來了解如何使用它。然後看看Adobe幫助碼頭找出加載。自我學習是最好的學習方式,所以我會鼓勵你盡力自己解決問題,但如果你有問題,可以在這裏問問他們,我或其他人可以幫助你弄清楚具體問題。

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中進行管理,如果是正確的,那麼緊接着下一個問題。 如何實現它沒有達到。