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();
}
}
Libgdxの例の例を見てください。 libgdxテストクラスからのドラッグアンドドロップテストは次のとおりです。 DragAndDropTest
アクターをドラッグ/スライドするだけの場合は、GestureListenerを追加して、次のようにステージを入力プロセッサに渡す必要があります:Gdx.input.setInputProcessor(stage);
。これが GestureDetectorTest libgdxからです。ドラッグイベントの場合、そのFlinglistener。
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);
}
});
編集:メソッドdrag
代わりにtouchDragged
メインのゲーム画面クラスにマルチプレクサを追加して、さまざまなクラスのイベントにアクセスできるようにします。
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);
}
}));