0

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

不过,这种方法可能仍然行不通……

4

2 回答 2

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帮我解决了这个难题

于 2013-03-10T16:51:42.127 回答
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 有其他情况的解决方案。)

于 2013-03-10T16:54:23.663 回答