ActionScript 3.0 Программный поток - PullRequest
1 голос
/ 30 апреля 2011

Я пробовал методом проб и ошибок, отслеживая строки, чтобы я мог понять программный поток 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-адреса изображений и вставляет их в массив, а затем отслеживает их.

Для меня очень важно понять поток, я не хочу двигаться вперед, не понимая этого. Спасибо.

1 Ответ

1 голос
/ 30 апреля 2011

Ну, я надеюсь, что смогу разобрать это для вас достаточно:

Ваша программа запускается, затем запускается Строка 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 вывод.

Остальное самоочевидно, если вы поняли, что я сказал до сих пор.

Надеюсь, это поможет.

...