[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
истинен, если его сделали движение.
Надеюсь, вы можете помочь. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать как комментарий!
Спасибо за этот совет. Но я действительно не знаю, как использовать трассировку. (MethodTracing) Я сделал след, но теперь все, что я знаю, это то, что перемещение Methode составляет около 70% всего времени вычисления одного цикла. – BennX
i Оптимизирован метод перемещения, поэтому я не создаю новые экземпляры Actions, просто изменяю одно действие и добавляю его снова. Лучше выглядит в трассе. Спасибо за это – BennX
Да, создание объектов в пути визуализации может привести к икотам и замедлению. Используйте трекер отслеживания памяти DDMS, чтобы отслеживать их и устранять. –