2013-04-25 3 views
0

[UPDATE] Я немного изменил порядок, поэтому я вызываю super.act(delta) в конце метода и, похоже, немного помогает! Но не уверен в этом.небольшие задержки при запуске следующего действия MoveTo

У меня есть квадратная система для моей карты. Таким образом, его 2D-массив, и я делаю одно движение, фигура перемещается от одного квадрата к другому. Хотя это невозможно «остановить» фигуру между двумя квадратами.

Когда мои персонажи сделали одно движение, я проверю, касательно касания сенсорной панели, и если да, я начинаю следующий ход. Хотя это кажется, что иногда отстает, и я не знаю почему !? Я действительно надеюсь, что вы можете найти «отставание». Вот как я вычислить следующий шаг внутри 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 к моим цифрам.

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 истинен, если его сделали движение.

Надеюсь, вы можете помочь. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать как комментарий!

ответ

1

Для оптимизации кода Android существуют более эффективные инструменты, чем StackOverflow. Используйте профайлер и посмотрите, что на самом деле происходит. В частности, профилировщик traceview: how to use traceview in eclipse for android development? (Если вы не используете Eclipse, вы можете использовать traceview непосредственно через ADT.)

+0

Спасибо за этот совет. Но я действительно не знаю, как использовать трассировку. (MethodTracing) Я сделал след, но теперь все, что я знаю, это то, что перемещение Methode составляет около 70% всего времени вычисления одного цикла. – BennX

+0

i Оптимизирован метод перемещения, поэтому я не создаю новые экземпляры Actions, просто изменяю одно действие и добавляю его снова. Лучше выглядит в трассе. Спасибо за это – BennX

+0

Да, создание объектов в пути визуализации может привести к икотам и замедлению. Используйте трекер отслеживания памяти DDMS, чтобы отслеживать их и устранять. –

Смежные вопросы