我正在制作一个应用程序,我有一个恼人的错误/错误:当我希望我的图像逐渐向上移动时,它什么都不做。以下是我的一些代码:
public void checkButtons(){
MoveToAction moveUp = new MoveToAction();
moveUp.setDuration(actionDuration);
moveUp.setPosition(0, Gdx.graphics.getHeight());
MoveToAction moveDown = new MoveToAction();
moveDown.setDuration(actionDuration);
moveDown.setPosition(0, Gdx.graphics.getHeight() - Gdx.graphics.getHeight() * 2);
MoveToAction moveLeft = new MoveToAction();
moveLeft.setDuration(actionDuration);
moveLeft.setPosition(Gdx.graphics.getWidth() - Gdx.graphics.getWidth() * 2, 0);
MoveToAction moveRight = new MoveToAction();
moveRight.setDuration(actionDuration);
moveRight.setPosition(Gdx.graphics.getWidth(), 0);
if (goingUp == true){
red_dot.addAction(moveUp);
if (goingUp == false){
red_dot.removeAction(moveUp);
}
}
if (goingDown == true){
red_dot.addAction(moveDown);
if (goingDown == false){
red_dot.removeAction(moveDown);
}
}
if (goingLeft == true){
red_dot.addAction(moveLeft);
if (goingLeft == false){
red_dot.removeAction(moveLeft);
}
}
if (goingRight == true){
red_dot.addAction(moveRight);
if (goingRight == false){
red_dot.removeAction(moveRight);
}
}
red_dot是一个图像,其余变量非常简单。 提前致谢。
答案 0 :(得分:2)
要检查的一些事项:
stage.act()
?actionDuration
非零吗?似乎你对逻辑流程有一些误解。重复四次的代码结构没有意义:
if (someCriterion == true) {;
doSomething();
if (someCriterion == false) {
//Code in here will never be called unless `doSomething()` immediately causes
//someCriterion to become false as a side effect (which addAction() will not do).
}
}
我猜你正在考虑在动作完成后调用addAction
下的代码,或者重复调用它。但事实并非如此。如果要提前停止操作,则必须在代码中将goingUp
等变量更改为false的位置删除它们。
但是如果你只是想删除完成的动作,那就没必要,因为这会自动发生。
此外,您不应该创建您可能没有使用的所有额外操作。你正在产生大量可能导致口吃的垃圾。只创建您肯定会使用的操作。而不是使用new MoveToAction()
,而是使用Actions.moveTo()
从池中获取所需的操作。然后它在完成时不会触发垃圾收集,因为Stage知道将池化的操作发送回池中进行回收。