2015-03-03 5 views
0

Итак, у меня есть актер, который является спрайтом, установленным на этапе просмотра экрана. То, что я хочу сделать, - это коснуться актера, а затем коснуться пятна на экране, он будет двигаться так свободно. В настоящее время, когда я касаюсь актера, он просто прыгает, по-видимому, в случайные пятна. Вот некоторые из кода в моем классе актера,Переместить актеры точно LibGDX Scene2d

public MyActor(){ 

    setBounds(sprite.getX(),sprite.getY(), 
       sprite.getWidth(),sprite.getHeight()); 

    setTouchable(Touchable.enabled); 

    addListener(new InputListener(){ 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, 
           int pointer, int button) { 

      MoveByAction mba = new MoveByAction(); 
      mba.setAmount(x,y); 
      MyActor.this.addAction(mba); 
      return true; 
     } 


    }); 
} 

@Override 
protected void positionChanged() { 
    sprite.setPosition(getX(),getY()); 
    super.positionChanged(); 
} 

@Override 
public void draw(Batch batch, float parentAlpha) { 
    sprite.draw(batch); 
} 
@Override 
public void act(float delta){ 
    super.act(delta); 
} 
+0

Использовать метод проекта камеры видового экрана сцены, чтобы преобразовать экран X и y в x и y сцены. – Tenfour04

ответ

0

Несколько вопросов, чтобы задать здесь. Прежде всего, ваше прикосновение касается только вашего актера. Это будет именно то, где актер. Вам нужно реализовать на уровне сцены некоторый базовый конечный автомат, чтобы знать «при первом нажатии, этот актер выбран», тогда он должен находиться в состоянии «выбрать, где этот актер идет», и, наконец, когда вы выбираете позицию, отправить XY выбранному игроку, чтобы сделать ход.

Теперь, как упоминалось в Tenfour04, вам нужно выяснить преобразование XY сенсорной точки экрана в координаты игрового мира. Tenfour04 сделал хороший комментарий об использовании метода проекции на камере просмотра, чтобы достичь этого. Как только вы это сделаете, вы можете отправить координаты вашему актеру, чтобы сделать ранее упомянутый материал.

Для достижения этой цели я бы использовал фреймворк Action, как показано ниже: actor.addAction (moveTo (x, y, 0.4f, Interpolation.circle));

Этой страница показывает все хорошие действия, доступные для Scene2d: https://github.com/libgdx/libgdx/wiki/Scene2d#actions

Надеется, что это то, что вам нужно. :)

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