Что происходит первым, MovieClip.onLoad() или Event.ENTER_FRAME?

Я делаю небольшую игру во Flash в качестве школьного проекта, и мне было интересно, что сработает первым при размещении фрагмента ролика — функция onLoad или событие ENTER_FRAME.

Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ: я удалил onLoad, потому что он фактически не вызывается, когда объект помещается на сцену.

var loaded:Boolean = false;
var angle:Number = 0; //in radians
this.addEventListener(Event.ENTER_FRAME, update);
function init():void {
    //get projectile position based on relation to mouse and spawning point.
    trace("init");
    loaded = true;
    this.angle = Math.atan2(mouseY - this.y, mouseX - this.x);
}
function update(e:Event):void {
    /* TRIG TIME! Move the object a certain amount
     * of pixels-- based on the delta, in the specified angle.
     */
    if (!loaded) {
        init();
    }
    trace("update");
    var slope:Number = Math.tan(angle);
}

Этот метод все еще, вероятно, не работает, хотя...


person Codr    schedule 10.03.2013    source источник
comment
Возможно, вы могли бы использовать эти два и добавить функцию trace() к каждому из них, например, trace(OnLoad здесь) & trace(Enter frame) и просто посмотреть, что отображается на выходе первым, это просто предположение   -  person Radicate    schedule 10.03.2013
comment
хотелось бы узнать результат :)   -  person Radicate    schedule 10.03.2013
comment
Что ж, я добавил функции трассировки, но они не отображаются в окне вывода, поэтому я не думаю, что смотрю в нужное место, или функции не вызываются. Вы знаете, где я должен найти результаты трассировки? :Я   -  person Codr    schedule 10.03.2013
comment
На самом деле мне удалось заставить обновление работать, но инициализация не работает.   -  person Codr    schedule 10.03.2013
comment
Можете ли вы опубликовать код, чтобы я мог видеть, как вы пытались его настроить?   -  person Radicate    schedule 10.03.2013
comment
Ну, я закончил тем, что сделал что-то другое - давайте добавим это к вопросу.   -  person Codr    schedule 10.03.2013
comment
На самом деле, это мой плохой. Actionscript 3 не включает onLoad, как Actionscript 2, я считаю, что вы можете использовать Event.ADDED или Event.ADDED_TO_STAGE. Я проверю это для вас сейчас и скажу вам, что загружается первым   -  person Radicate    schedule 10.03.2013
comment
Я попробовал Event.ADDED_TO_STAGE, и ничего не произошло, поэтому я решил вызвать init() через функцию обновления — хотя я чувствую, что это приведет к ошибкам. Я попробую Event.ADDED.   -  person Codr    schedule 10.03.2013
comment
Что ж, я переместил класс в его собственный файл ActionScript, дал ему конструктор, и теперь все работает как часы!   -  person Codr    schedule 10.03.2013
comment
Да, я тоже только что проверил ~ извините, это заняло у меня много времени, я был занят другими делами, хе-хе, но да, во-первых, init() не работает с кодом временной шкалы (поэтому помещение его в файл AS исправило это), ДОБАВЛЕНО отлично работало, когда я написал это от родителя, который добавляет мувиклип, и если вам интересно, ADDED работает первым, до ENTER_FRAME :)   -  person Radicate    schedule 10.03.2013
comment
Круто, спасибо чувак!   -  person Codr    schedule 10.03.2013


Ответы (2)


В actionscript 3 вы должны добавить прослушиватель, а не использовать onLoad, поэтому вместо MovieClip.onLoad() выполните:

MovieClip.addEventListener(Event.ADDED,mcLoaded);

function mcLoaded(e:Event):void {

trace("MovieClip added.");

}

Что касается заданного вопроса, ADDED/ADDED_TO_STAGE выполняется до ENTER_FRAME.

Это решение предназначено для кода временной шкалы (не отдельный файл .as. У OP есть решение для другого случая).

person Radicate    schedule 10.03.2013

onLoad, похоже, не работает так, как я ожидал, в этом случае - я решил это, изменив функцию onLoad на событие ADDED_TO_STAGE. Я переместил весь код сценария действий для класса из файла флэш-памяти в отдельный файл сценария действий и поместил прослушиватели событий для событий event.ENTER_FRAME и event.ADDED_TO_STAGE в конструктор класса, и теперь весь класс работает как шарм.

public function Projectile() {
    this.addEventListener(Event.ADDED_TO_STAGE, init);
    this.addEventListener(Event.ENTER_FRAME, update);
    super();
}

Функция init была вызвана до обновления функции, и теперь я могу продолжить свою работу!

Особая благодарность Don за помощь в решении этой дилеммы.

person Codr    schedule 10.03.2013