Поток программы Actionscript 3.0

#flash #actionscript-3 #flash-cs5 #flow

#actionscript-3 #flash #flash-cs5 #поток управления

Вопрос:

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

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

Ваша программа запускается, затем выполняется строка 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(событие.ENTER_FRAME, generateURLs); подключает прослушиватель событий, который запустится, как только будет введен первый кадр, и выполнит вашу функцию generateURLs.

Затем программа интерпретирует строку 8 и выполняет ее:

 I'm in line 8
  

После этого вы определяете функцию generateURLs, за которой следует другая трассировка, которая выводит:

 I'm in line 24
  

После этого вы снова определяете некоторые функции (showBar, hideBar), за которыми следует другой оператор трассировки, приводящий к:

 I'm in line 34
  

Хорошо, теперь важно отметить, что все, что вы сделали, это зарегистрировали несколько прослушивателей событий для прослушивания ваших событий. Однако ни одно из ваших событий еще не было запущено, поэтому вы не видели, чтобы какие-либо вызовы трассировки выполнялись ни из одной из ваших функций. Однако, поскольку это последняя строка в кадре 1, программа теперь запускает событие.ВВЕДИТЕ_FRAME, который вы зарегистрировали для прослушивания, который, в свою очередь, вызывает вашу функцию generateURLs, в результате чего pokemon/img_XX.jpg вывод.

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

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

Комментарии:

1. неплохо. Итак, вот как это работает. Я думал, что после добавления eventlistener на сцену запустится функция. Спасибо, что уделили мне время.