As3调用数组外的函数

时间:2012-12-27 22:38:27

标签: arrays actionscript-3 flash

我对AS3和编程本身不熟悉。

我有这个问题。我希望能够在Pl_array函数之外使用 En_array AfterLoad ,但我总是得到未定义的值。我在时间轴内编写代码而不是.as文件。这有关系吗?

我试图将它们从功能中归还,但由于它与听众有关,我只是不知道该怎么做,我也试图让它们公开。

这是第一帧的代码:

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

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

,这是第二个叫做Dictionary:

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。我试图在谷歌找到解决方案,但不能。

3 个答案:

答案 0 :(得分:1)

此代码看起来应该可以正常工作,但如果您尝试访问En_array中的第一个元素,则需要记住索引从0开始,而不是1.您可能还需要确保{{1}在读取任何值之前,它不是空的。试试这个:

En_array

答案 1 :(得分:0)

有时需要几秒钟才能加载数据。加载后,从数组中读取数据。在时间轴中,加载不得与读取过程处于同一帧,除非另有说明,在第一行代码中显式加载然后读取。

答案 2 :(得分: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.lenght> 0或array = null)