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);
}
好的,无论如何我都无法完成这项工作,它一直将坐标重置为 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);
}