0

私は AS3 とプログラミング自体が初めてです。

この問題があります。関数の外側でPl_arrayandを使用できるようにしたいのですが、常に未定義の値を取得します。.as ファイルではなく、タイムライン内にコードを書いています。それは問題ですか?En_arrayAfterLoad

私は関数からそれらを返そうとしていましたが、リスナーに関連しているため、その方法もわかりません。また、それらを公開しようとしていました。

最初のフレームのコードは次のとおりです。

import flash.events.MouseEvent;
stop();
Btn_start.addEventListener(MouseEvent.CLICK, onStartClick);

function onStartClick(me:MouseEvent):void{
    gotoAndStop("Dictionary");
}

そして、これは辞書と呼ばれる2番目のものです:

import flash.events.Event;
import flash.utils.Timer;
import flash.events.MouseEvent;

stop();

var myTextLoader:URLLoader = new URLLoader();
var Txt_array:Array=new Array(); //tablica wczytanych zwrotów
var Pl_array:Array=new  Array();
var En_array:Array=new Array();
var myTimer:Timer = new Timer(1000);

myTextLoader.addEventListener(Event.COMPLETE, onLoaded); //listener na koniec wczytywania pliku tekstowego

function onLoaded(e:Event):void { //funkcja wywoływana przez listener na koniec wczytywania pliku
    Txt_array = e.target.data.split(/\n/); //
    dispatchEvent(new Event("Load_END"));
}
myTextLoader.load(new URLRequest("Zwroty.txt"));

this.addEventListener("Load_END", AfterLoad); //kod wykonywano po wczytaniu pliku tekstowego 
function AfterLoad(e:Event):void{   
    for each (var s:String in Txt_array){// pętla która rozdziela tekst na polski i angielski
        var i:int=0;
      En_array[i]=s.substr(0, s.indexOf("-")-1);
      Pl_array[i]=s.substr(s.indexOf("-")+2, s.length);
      i++;
    } //koniec fora
}//koniec funkcji

Begin.addEventListener(MouseEvent.CLICK, test);

function test(e:Event):void{
    trace(En_array[1]);
}

//funkcja wyświetlająca string w txt_load
function ShowString (txt_show:String):void{
    load_txt.text = txt_show;
}

function ShowOpinion(txt_opinion:String):void{
    opinion_txt.text=txt_opinion;
}   

function HideOpinion():void{
    opinion_txt.text=" ";
}

//funkcja porównująca łańcuchy
function Compare(txt_a:String,txt_b:String):Boolean{
    if (txt_a==txt_b){ 
      return true;
    } 
    return false;
}

//up_btn.useHandCursor=true;
//up_btn.addEventListener(MouseEvent.MOUSE_OVER, switch_bg);

//function switch_bg(me:MouseEvent):void{
    //var newColor:ColorTransform = me.target.transform.colorTransform;
    //newColor.color = 0x1000C6;
    //me.target.transform.colorTransform = newColor;
//}

test関数でundefined、トレース中に常に取得します。Google で解決策を見つけようとしましたが、できませんでした。

4

3 に答える 3

1

このコードは機能するはずですが、 の最初の要素にアクセスしようとしている場合は、En_arrayインデックスが 1 ではなく 0 から始まることを覚えておく必要がありEn_arrayます。値を読み取る前に が空でないことを確認することもできます。これを試して:

if (En_array.length > 0)
    trace(En_array[0]);
于 2012-12-27T22:45:31.193 に答える
0

最初にデータをロードするのに数秒かかることがあります。ロード後、配列からデータを読み取ります。タイムラインでは、ロードは読み取りプロセスと同じフレームであってはなりません。そうでない場合は、コードの最初の行で明示的にロードされ、その後に読み取りが続きます。

于 2013-04-19T07:09:18.757 に答える
0

コードに混乱があります。もっと簡単にしましょう:

import flash.events.Event;
import flash.utils.Timer;
import flash.events.MouseEvent;

stop();

var myTextLoader:URLLoader = new URLLoader();
var Txt_array:Array;
var Pl_array:Array;
var En_array:Array;
/* Good practice is to create object when you relay need it */
var myTimer:Timer = new Timer(1000);

myTextLoader.addEventListener(Event.COMPLETE, onLoaded); 

function onLoaded(e:Event):void {
   Txt_array = e.target.data.split(/\n/); // now we create new array
   afterLoad(Txt_array);
}

function afterLoad(array):void{ // it is good habit to start function names from small letter
    En_array = [];// create arrays
    Pl_array = [];

    for each (var s:String in array){
      En_array.push(s.substr(0, s.indexOf("-")-1));
      Pl_array.push(s.substr(s.indexOf("-")+2, s.length));
      // push let you add items more efficient and you don't need index
    }
}

myTextLoader.load(new URLRequest("Zwroty.txt"));

これですべて問題ないはずです:)オブジェクト(あなたの場合は配列)に使用したい要素があるかどうかを確認することを忘れないでください(array.length> 0またはarray = nullなど)

于 2013-04-19T13:59:06.623 に答える