Как перетаскивать актеров на libgdx scene2d?
Я разрабатываю игру с помощью libGDX, и я хотел бы знать, как я могу перетащить актера. Я сделал свою сцену и нарисовал актера, но я не знаю, как вызвать это событие.
Пожалуйста, попробуйте помочь мне использовать мою собственную архитектуру.
public class MyGame implements ApplicationListener
{
Stage stage;
Texture texture;
Image actor;
@Override
public void create()
{
texture = new Texture(Gdx.files.internal("actor.png"));
Gdx.input.setInputProcessor(stage);
stage = new Stage(512f,512f,true);
actor = new Image(texture);
stage.addActor(actor);
}
@Override
public void render()
{
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
stage.draw();
}
}
Ответы
Ответ 1
Взгляните на пример в примерах libgdx. Вот тест перетаскивания из классов тестов libgdx: DragAndDropTest
Если вы просто хотите перетащить/сдвинуть свой актер вокруг, вам нужно добавить к нему GestureListener и передать свою Stage в Inputprocessor следующим образом: Gdx.input.setInputProcessor(stage);
.
Вот ссылка GestureDetectorTest из libgdx.
Для событий перетаскивания это Flinglistener.
Ответ 2
Если вы не хотите использовать класс DragAndDrop
, вы можете использовать это:
actor.addListener(new DragListener() {
public void drag(InputEvent event, float x, float y, int pointer) {
actor.moveBy(x - actor.getWidth / 2, y - actor.getHeight / 2);
}
});
EDIT: метод drag
вместо touchDragged
Ответ 3
В главном классе gamescreen добавьте мультиплексор, чтобы вы могли получать доступ к событиям из разных классов:
private InputMultiplexer inputMultiplexer = new InputMultiplexer(this);
После того, как конструктор игрового экрана добавит в качестве примера:
inputMultiplexer = new InputMultiplexer(this);
inputMultiplexer.addProcessor(1, renderer3d.controller3d);
inputMultiplexer.addProcessor(2, renderer.controller2d);
inputMultiplexer.addProcessor(3, renderer3d.stage);
Gdx.input.setInputProcessor(inputMultiplexer);
В вашем классе, использующем актеры, используйте DragListener как и пример:
Actor.addListener((new DragListener() {
public void touchDragged (InputEvent event, float x, float y, int pointer) {
// example code below for origin and position
Actor.setOrigin(Gdx.input.getX(), Gdx.input.getY());
Actor.setPosition(x, y);
System.out.println("touchdragged" + x + ", " + y);
}
}));