comment faire glisser et déposer des acteurs sur libgdx scene2d?

Je développe un jeu en utilisant libGDX et j’aimerais savoir comment je peux glisser-déposer un acteur. J’ai fait ma scène et dessiné l’acteur, mais je ne sais pas comment déclencher cet événement.

S’il vous plaît, essayez de m’aider à utiliser ma propre architecture.

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

Jetez un coup d’œil à l’exemple dans les exemples libgdx. Voici le test de glisser-déposer des classes de test libgdx : DragAndDropTest

Si vous voulez simplement faire glisser / glisser votre acteur, vous devez lui append un GestureListener et lui transmettre votre scène comme Gdx.input.setInputProcessor(stage); : Gdx.input.setInputProcessor(stage); . Voici le GestureDetectorTest de libgdx. Pour les événements de drag, c’est le Flinglistener.

Si vous ne voulez pas utiliser la classe DragAndDrop , vous pouvez utiliser ceci:

 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: méthode drag place touchDragged

Dans votre classe d’écrans de jeu principale, ajoutez un multiplexeur pour pouvoir accéder aux événements de différentes classes:

 private InputMultiplexer inputMultiplexer = new InputMultiplexer(this); 

Après le constructeur de gamescreen, ajoutez comme exemple:

 inputMultiplexer = new InputMultiplexer(this); inputMultiplexer.addProcessor(1, renderer3d.controller3d); inputMultiplexer.addProcessor(2, renderer.controller2d); inputMultiplexer.addProcessor(3, renderer3d.stage); Gdx.input.setInputProcessor(inputMultiplexer); 

Dans votre classe qui utilise les acteurs, utilisez DragListener comme exemple:

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