[更新]我改变了顺序,所以我在方法结束时调用了super.act(delta)
,它似乎有点帮助!但还不确定。
我的地图有一个方形系统。所以它是一个二维阵列,我做一个动作,图形确实从一个方格移动到另一个方格。虽然不可能“停止”2个方格之间的数字。
当我的角色做出一个动作时,我检查触摸板是否被触摸,如果是,我开始下一个动作。虽然它似乎有时滞后,我不知道为什么!?我真的希望你能找到“滞后”。以下是我计算act()
字符Actor
内的下一步行动的方法:
@Override
public void act(float delta) {
super.act(delta); // so the actions work
if (moveDone) {
if (screen.gameHud.pad.isTouched()) {
// check in which direction is the touchcontroller
if (screen.gameHud.pad.getKnobPercentX() < 0
&& Math.abs(screen.gameHud.pad.getKnobPercentY()) < Math
.abs(screen.gameHud.pad.getKnobPercentX())) {
// checkt if the |x|>|y|
if (checkNextMove(Status.LEFT)) {
this.status = Status.LEFT;
move(Status.LEFT);
this.screen.map.mapArray[(int) (this.mapPos.x)][(int) this.mapPos.y] = Config.EMPTYPOSITION;
this.screen.map.mapArray[(int) (this.mapPos.x - 1)][(int) this.mapPos.y] = Config.CHARSTATE;
this.mapPos.x--;
moveDone = false;
}
} else if //.... rest is the same just with other directions
else{ //if touchpad isnt touched!
setIdle();
}
updateSprite(delta); //just change the textureRegion if its time for that
} //methode end
好的,所以你需要一些更多的信息我相信。 Checkmoves是这样的:
case LEFT:
if (this.mapPos.x - 1 >= 0)
if (this.screen.map.mapArray[(int) (this.mapPos.x - 1)][(int) this.mapPos.y] == Config.EMPTYPOSITION)
return true;
break; //same for all other just direction changin
最后你需要知道的是move(_)
我猜。它确实为我的数字添加了一个moveTo Action。
public void move(Status direction) {
switch (direction) {
case LEFT:
this.addAction(Actions.sequence(
Actions.moveTo((getX() - Config.BLOCK_SIZE), getY(), speed),
moveDoneAction));
break;
moveDoneAction是一个简单的RunnableAction
,如果它完成移动,会将boolean moveDone
设置为true。
我真的希望你能提供帮助。如果您需要更多信息,请告诉我评论!
答案 0 :(得分:1)
有优于StackOverflow的工具可用于优化Android代码。使用分析器,看看实际发生了什么。具体来说,traceview探查器:how to use traceview in eclipse for android development?(如果你没有使用Eclipse,你可以直接通过ADT使用traceview。)