Flash - 坐标不断重置为 0

Flash - coordinates keeps reseting to 0

好的,无论如何我都无法完成这项工作,它一直将坐标重置为 0。
我在舞台上制作了一艘船,并制作了那艘船的 class。

public class Ship extends MovieClip {

    private var speedX;
    private var speedY;

    public function Ship() {
        x = 50;
        y = 150;
        trace(x, y);
        stage.addEventListener(KeyboardEvent.KEY_DOWN ,keyDown);
        stage.addEventListener(KeyboardEvent.KEY_UP ,keyUp);
        stage.addEventListener(Event.ENTER_FRAME, update);
    }
    public function keyDown(e:KeyboardEvent) {
        if(e.keyCode == 37) {
            speedX = -5;
        }
        if(e.keyCode == 38) {
            speedY = -5;
        }
        if(e.keyCode == 39) {
            speedX = 5;
        }
        if(e.keyCode == 40) {
            speedY = 5;
        }
    }

    public function keyUp(e:KeyboardEvent) {
        trace (x,y);
        if(e.keyCode == 37 || e.keyCode == 39) {
            speedX = 0;
        }
        if(e.keyCode == 38 || e.keyCode == 40) {
            speedY = 0;
        }
    }

    public function update(e:Event) {
        x += speedX;
        y += speedY;
    }

}

这里我设置坐标为50、150,trace显示正确,但还是不行
除了坐标外游戏运行正常,我做错了什么?

我已经在我的机器上测试了这段代码,它工作正常。是否有您未包含的代码部分?

我还更改了 class 以接受主舞台对象作为参数。这可能会解决您遇到的问题:

public function Ship(pStage:DisplayObjectContainer):void
{
    x = 50;
    y = 150;
    trace(x, y);
    pStage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
    pStage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
    pStage.addEventListener(Event.ENTER_FRAME, update);
}

无论在何处初始化 Ship 对象,请确保从 Main class 传递阶段对象。这对我所有的 AS3 项目都有效。

不确定这是否有帮助,但我会在 Ship() 函数中将更新速度明确设置为 0。

我也会根据你放的地方设置位置,这样你就可以把它放在场景中,然后它会从那个位置开始。

public function Ship() {
    speedX = 0
    speedY = 0
    trace(x, y);
    stage.addEventListener(KeyboardEvent.KEY_DOWN ,keyDown);
    stage.addEventListener(KeyboardEvent.KEY_UP ,keyUp);
    stage.addEventListener(Event.ENTER_FRAME, update);
}