如何将演员拖放到libgdx scene2d上?

我正在开发一个使用libGDX的游戏,我想知道如何拖放一个Actor。 我已经完成了舞台并吸引了演员,但我不知道如何触发这个事件。

请尽量帮助我使用我自己的架构。

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

Solutions Collecting From Web of "如何将演员拖放到libgdx scene2d上?"

看看libgdx示例中的示例。 这里是从libgdxtesting类的拖放testing: DragAndDropTest

如果你只是想拖动/滑动你的Actor,你需要添加一个GestureListener,并将你的Stage传递给InputProcessor,如下所示: Gdx.input.setInputProcessor(stage); 。 这是来自libgdx的GestureDetectorTest。 对于拖动事件它的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); 

在使用actor的类中,使用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); } }));