Flash - 坐标保持重置为0

时间:2015-09-06 14:35:09

标签: actionscript-3 flash coordinates

好的我无论如何都无法完成这项工作,它会将坐标重置为0 我在舞台上制作一个船舶对象并制作该船的一类。

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,迹线显示正确,但它仍然无效。
除了坐标,游戏工作正常,我做错了什么?

2 个答案:

答案 0 :(得分:0)

我已经在我的机器上测试了这段代码并且工作正常。代码的任何部分是否包含在内?

我还改变了类以接受主阶段对象作为参数。这可能会解决您遇到的问题:

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类传递舞台对象。这对我的所有AS3项目都有用。

答案 1 :(得分:0)

不确定这会有所帮助,但我会在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);
}