首先发生什么,MovieClip.onLoad()或Event.ENTER_FRAME?

时间:2013-03-10 15:25:19

标签: flash actionscript flash-cs4

我正在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);
}

这种方法可能不起作用,但是......

2 个答案:

答案 0 :(得分:0)

在这种情况下,

onLoad似乎没有像我预期的那样工作 - 我通过将onLoad函数更改为ADDED_TO_STAGE事件来解决这个问题。我将该类的所有actionscript代码移出flash文件,并移动到单独的actionscript文件中,并将event.ENTER_FRAMEevent.ADDED_TO_STAGE事件的事件侦听器放入类的构造函数中,现在整个班级就像一个魅力。

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

函数init在函数更新之前被调用,现在我可以继续我的工作了!

特别感谢Don帮助我解决这个难题

答案 1 :(得分:0)

在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具有针对其他情况的解决方案。)