0

我对 AS3 和编程本身有点陌生。

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

我试图从函数中返回它们,但由于它与侦听器有关,我只是不知道该怎么做,我也试图将它们公开。

这是第一帧的代码:

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

function onStartClick(me:MouseEvent):void{
    gotoAndStop("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我试图在 Google 中找到解决方案,但找不到。

4

3 回答 3

1

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

if (En_array.length > 0)
    trace(En_array[0]);
于 2012-12-27T22:45:31.193 回答
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)

于 2013-04-19T13:59:06.623 回答
0

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

于 2013-04-19T07:09:18.757 回答