2014-12-31 66 views
3

我一直想一個文本文件加載到一個字符串變量。該文本文件名爲text.txtsuccessful。下面的代碼:在AS3中,一個文本文件加載到一個字符串

public class Main extends Sprite 
{ 
    private var text:String = "text"; 
    private var textLoader:URLLoader = new URLLoader(); 

    public function Main() { 
     textLoader.addEventListener(Event.COMPLETE, onLoaded); 
     function onLoaded(e:Event):void { 
      trace("Before 1: " + text); //output: text 
      trace("Before 2: " + e.target.data); //output: successful 
      text = e.target.data; 
      trace("After 1: " + text); //output: successful - yay!!! it worked 

     } 

     textLoader.load(new URLRequest("text.txt")); 

     trace("After 2: " + text); //output: text - what??? nothing happened??? but it just worked 

    } 

} 

輸出:

After 2: text Before 1: text Before 2: successful After 1: successful

回答

2

你正面臨着同步VS異步問題

功能onLoadedtextLoader異步調用時Event.COMPLETE分派,如反對"After 2"這是textLoader.load後直接調用。

那你必須記住的是textLoader.load是非阻塞的,這意味着"After 2"可能是onLoaded之前執行(你可以隨時承擔)。

如果在答案的這一點你仍然感到困惑,我會說加載一個文件需要時間並且執行一條指令的時間可能會有所不同,但大部分時間比加載文件所需的時間要短得多(想象一下文件是4go大)。你無法預測會發生什麼,也許磁盤已經很忙,你可能需要等待!但是你可以利用這個寶貴的時間來從文本文件做別的事情完全獨立的,這就是爲什麼它有時是由編程語言(php例如加載一個文件同步)異步的。

下一步


現在,我已經解釋過"After 2"實際上並不存在,你必須使用"After 1" 作爲切入點,但沒有什麼可以幫助您進行一個函數命名afterLoad,你會這樣調用

public function Main() { 
     textLoader.addEventListener(Event.COMPLETE, onLoaded); 

     function onLoaded(e:Event):void { 
      trace("Before 1: " + text); //output: text 
      trace("Before 2: " + e.target.data); //output: successful 
      text = e.target.data; 
      afterLoad(); 
     } 

     textLoader.load(new URLRequest("text.txt")); 
    } 


} 

private function afterLoad():void { 
    trace("After: " + text); // it should work now :) 
} 
+0

所以,我應該怎麼辦呢? –

+0

@DleanJeans我更新了我的答案:) – axelduch

+0

但可以和我怎麼得到它(加載文本)以後? –

相關問題