Перемещение актеров с точностью LibGDX Scene2d

Итак, у меня есть актер, который представляет собой спрайт, установленный на сцене screenviewport. Что я хочу сделать, так это иметь возможность коснуться актера, а затем коснуться точки на экране, и она будет плавно двигаться. В настоящее время, когда я касаюсь актера, он просто прыгает, казалось бы, в случайные места. Вот часть кода в моем классе актеров,

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);
}

person jumpman8947    schedule 03.03.2015    source источник
comment
Используйте метод проекта камеры области просмотра сцены, чтобы преобразовать экран X и y в x и y сцены.   -  person Tenfour04    schedule 03.03.2015


Ответы (1)


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

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

Чтобы добиться движения, я бы использовал структуру Action, как показано ниже: acter.addAction(moveTo(x, y, 0.4f, Interpolation.circle));

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

Надеюсь, это то, что вам было нужно. :)

person Gregory Fein    schedule 03.03.2015