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