开始下一个moveTo动作时的小滞后

时间:2013-04-25 10:52:08

标签: java android animation libgdx

[更新]我改变了顺序,所以我在方法结束时调用了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。

我真的希望你能提供帮助。如果您需要更多信息,请告诉我评论!

1 个答案:

答案 0 :(得分:1)

有优于StackOverflow的工具可用于优化Android代码。使用分析器,看看实际发生了什么。具体来说,traceview探查器:how to use traceview in eclipse for android development?(如果你没有使用Eclipse,你可以直接通过ADT使用traceview。)