2013-04-14 3 views
2

Мой персонаж - Актер, и я даю ему действие moveTo, когда я перемещаю его влево или вправо и так далее.
LEFT и UP действительно работает. Я вижу это, потому что мой debugmode показывает мне текущую позицию char внутри MapArray. (рисует цвет rectangel)
Если я звоню DOWN и RIGHT, он делает прогулку UP или LEFT, но я уверен, что я прав с направлением. Если я поправлюсь, он действительно поднимется, и если я нажму на него, он тоже поднимется!
Надеюсь, вы скажете мне, почему они идут в неправильном направлении!

Вот ход Methode где я ПГТ Действия актера:Actions.moveTo перемещается в неправильном направлении

private void move(Status direction) { 
    switch (direction) { 
    case LEFT: 
     this.clearActions(); 
     this.addAction(Actions.sequence(
       Actions.moveTo((getX() - Config.BLOCK_SIZE), getY(), speed), 
       new RunnableAction() { //to know when hes done to get the next move 
        public void run() { 
         moveDone = true; 
        } 
       })); 
     break; 
    case RIGHT: 
     this.clearActions(); 
     this.addAction(Actions.sequence(
       Actions.moveTo((getX() + Config.BLOCK_SIZE), getY(), speed), 
       new RunnableAction() { 
        public void run() { 
         moveDone = true; 
        } 
       })); 
    case DOWN: 
     this.clearActions(); 
     this.addAction(Actions.sequence(
       Actions.moveTo(getX(), (getY() - Config.BLOCK_SIZE), speed), 
       new RunnableAction() { 
        public void run() { 
         moveDone = true; 
        } 
       })); 
    case UP: 
     this.clearActions(); 
     this.addAction(Actions.sequence(
       Actions.moveTo(getX(), (getY() + Config.BLOCK_SIZE), speed), 
       new RunnableAction() { 
        public void run() { 
         moveDone = true; 
        } 
       })); 
    default: 
     break; 
    } 
} 


А вот как я называю это. Я надеюсь, что это прекрасно, что я отправляю немного более длинный код! Его более или менее просто устанавливают правильные позиции.

@Override 
     public void act(float delta) { 
      super.act(delta); 
      if (moveDone) { 
       if (screen.pad.isTouched()) { 
        // check in which direction is the touchcontroller 
        if (screen.pad.getKnobPercentX() < 0 
          && Math.abs(screen.pad.getKnobPercentY()) < Math 
            .abs(screen.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 (screen.pad.getKnobPercentX() > 0 
          && Math.abs(screen.pad.getKnobPercentY()) < Math 
            .abs(screen.pad.getKnobPercentX())) { 

         if (checkNextMove(Status.RIGHT)) { 
          move(Status.RIGHT); 
                this.status = Status.RIGHT; 
          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 (screen.pad.getKnobPercentY() > 0) { 
         if (checkNextMove(Status.DOWN)) { 
          this.status = Status.DOWN; 
          move(Status.DOWN); 
          this.screen.map.mapArray[(int) (this.mapPos.x)][(int) this.mapPos.y] = Config.EMPTYPOSITION; 
          this.screen.map.mapArray[(int) (this.mapPos.x)][(int) this.mapPos.y + 1] = Config.CHARSTATE; 
          this.mapPos.y++; 
          moveDone = false; 
         } 
        } else { 
         if (checkNextMove(Status.UP)) { 
          this.status = Status.UP; 
          move(Status.UP); 
          this.screen.map.mapArray[(int) (this.mapPos.x)][(int) this.mapPos.y] = Config.EMPTYPOSITION; 
          this.screen.map.mapArray[(int) (this.mapPos.x)][(int) this.mapPos.y - 1] = Config.CHARSTATE; 
          this.mapPos.y--; 
          moveDone = false; 
         } 
        } 
       } else { 
        setIdle(); 
       } 
      } 
      // methode from the absctract to change sprites 
      updateSprite(delta); 
     } 

Вот изображение, как оно выглядит, если я иду вправо. Он стоял слева от зеленого поля и теперь находится в правильном поле. Но картины нет.
right move

Здесь Розыгрыш полукокса:

@Override 
    public void draw(SpriteBatch batch, float parentAlpha) { 
     sprite.setPosition(this.getX(), this.getY()); 
     sprite.draw(batch); 
    } 

я действительно не вижу, где ошибка. надеюсь, вы можете помочь!

ответ

1

вы забыли добавить перерыв RIGHT, UP и DOWN случаи ..

private void move(Status direction) { 
switch (direction) { 
case LEFT: 
    this.clearActions(); 
    this.addAction(Actions.sequence(
      Actions.moveTo((getX() - Config.BLOCK_SIZE), getY(), speed), 
      new RunnableAction() { //to know when hes done to get the next move 
       public void run() { 
        moveDone = true; 
       } 
      })); 
    break; 
case RIGHT: 
    this.clearActions(); 
    this.addAction(Actions.sequence(
      Actions.moveTo((getX() + Config.BLOCK_SIZE), getY(), speed), 
      new RunnableAction() { 
       public void run() { 
        moveDone = true; 
       } 
      })); 
    break; 
case DOWN: 
    this.clearActions(); 
    this.addAction(Actions.sequence(
      Actions.moveTo(getX(), (getY() - Config.BLOCK_SIZE), speed), 
      new RunnableAction() { 
       public void run() { 
        moveDone = true; 
       } 
      })); 
    break; 
case UP: 
    this.clearActions(); 
    this.addAction(Actions.sequence(
      Actions.moveTo(getX(), (getY() + Config.BLOCK_SIZE), speed), 
      new RunnableAction() { 
       public void run() { 
        moveDone = true; 
       } 
      })); 
    break; 
default: 
    break; 
} 

}

+0

О Данг я так жаль, что длинный вопрос только потому, что не хватает перерыва. Большое спасибо, я просто этого не видел. – BennX

+0

Хе-хе .. :) не проблема – Elior

+0

@Benjamin Я также хочу разработать некоторые игры. Могу ли я спросить, используете ли вы для этого несколько уроков? и если вы можете направить меня на какой-то учебник, который вы нашли? :) – Elior

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