我通过跟踪字符串来尝试尝试和错误,这样我就可以理解actionscript的程序流程(或者一般的任何类似语言),但无济于事;我无法理解这一点,也许是因为我没有吃早餐。请向我解释为什么首先在输出中显示跟踪语句?
这是第一帧的代码
import flash.events.MouseEvent;
import flash.events.Event;
trace("I'm in line 3!");
stage.addEventListener(Event.ENTER_FRAME, generateURLs);
imageThumb.invButton.addEventListener(MouseEvent.MOUSE_OVER, showBar);
imageThumb.invButton.addEventListener(MouseEvent.MOUSE_OUT, hideBar);
trace("I'm in line 8");
// Generates the image URLs and inject them to the imageURLs array
var imageURLs:Array = new Array();
function generateURLs(e:Event):void {
trace("I'm inside the generateURLs function!");
var url:String = new String();
for(var i:int = 0; i <= 31; i++) {
url = new String('pokemon/img_' + i);
imageURLs.push(url + ".jpg");
trace(imageURLs[i]);
}
stage.removeEventListener(Event.ENTER_FRAME, generateURLs);
}
trace("I'm in line 24");
function showBar(evt:MouseEvent):void {
trace("I'm inside the ShowBar function!");
imageThumb.bar.gotoAndPlay('over');
}
function hideBar(evt:MouseEvent):void {
trace("I'm inside the hideBar function!");
imageThumb.bar.gotoAndPlay('out');
}
trace("I'm in line 34");
第二帧:
trace("We're not in Frame 1 anymore!");
最后一帧:
stop();
trace("STOP!!!");
和输出
I'm in line 3!
I'm in line 8
I'm in line 24
I'm in line 34
I'm inside the generateURLs function!
pokemon/img_0.jpg
pokemon/img_1.jpg
pokemon/img_2.jpg
pokemon/img_3.jpg
pokemon/img_4.jpg
pokemon/img_5.jpg
pokemon/img_6.jpg
pokemon/img_7.jpg
pokemon/img_8.jpg
pokemon/img_9.jpg
pokemon/img_10.jpg
pokemon/img_11.jpg
pokemon/img_12.jpg
pokemon/img_13.jpg
pokemon/img_14.jpg
pokemon/img_15.jpg
pokemon/img_16.jpg
pokemon/img_17.jpg
pokemon/img_18.jpg
pokemon/img_19.jpg
pokemon/img_20.jpg
pokemon/img_21.jpg
pokemon/img_22.jpg
pokemon/img_23.jpg
pokemon/img_24.jpg
pokemon/img_25.jpg
pokemon/img_26.jpg
pokemon/img_27.jpg
pokemon/img_28.jpg
pokemon/img_29.jpg
pokemon/img_30.jpg
pokemon/img_31.jpg
We're not in Frame 1 anymore!
STOP!!!
我要做的是在加载舞台时触发事件;它生成一些图像URL并将它们注入一个数组然后追溯它。
理解这一流程对我来说非常重要,我不想在不理解这一点的情况下前进。谢谢。
答案 0 :(得分:1)
好吧,我希望我可以为你分解它:
您的程序启动然后运行第3行生成输出:
I'm in line 3!
然后进入以下部分:
stage.addEventListener(Event.ENTER_FRAME, generateURLs);
imageThumb.invButton.addEventListener(MouseEvent.MOUSE_OVER, showBar);
imageThumb.invButton.addEventListener(MouseEvent.MOUSE_OUT, hideBar);
这里要发布的重要事情是上面的代码确实不会触发任何内容,而是注册一个侦听器(你定义的某个函数),以便在发生某个事件时执行。例如,第一行 stage.addEventListener(Event.ENTER_FRAME,generateURLs); 附加一个事件侦听器,一旦输入第一帧就会触发该事件侦听器并执行 generateURLs 功能
然后程序解释第8行并执行它:
I'm in line 8
之后,您将定义 generateURLs函数,后跟另一条输出的跟踪:
I'm in line 24
之后,您再次定义了一些函数( showBar , hideBar ),后跟另一个跟踪语句,结果为:
I'm in line 34
现在好了,在这里发布的重要事情就是你所做的就是注册一些事件监听器来监听你的事件。但是,没有任何事件被触发,这就是为什么你没有看到任何跟踪调用从你的任何函数执行。但是因为这是第1帧的最后一行,所以该程序现在会触发 Event.ENTER_FRAME ,您已经注册了该数据,然后通过这种方式调用您的 generateURLs 函数,从而导致 pokemon / img_XX.jpg 输出。
如果您理解我到目前为止所说的内容,其余部分将从此处自我解释。
希望这有帮助。