好的我无论如何都无法完成这项工作,它会将坐标重置为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,迹线显示正确,但它仍然无效。
除了坐标,游戏工作正常,我做错了什么?
答案 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);
}