Какво се случва първо, 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
Всъщност успях да накарам актуализацията да работи, но init не работи.   -  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. Преместих целия код на actionscript за класа от флаш файла в отделен файл на actionscript и поставих слушателите на събития за 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