2013-04-29 19 views
10

Ich entwickle ein Spiel mit libGDX und ich würde gerne wissen, wie ich einen Actor ziehen und ablegen kann. Ich habe meine Bühne geschaffen und den Schauspieler gezeichnet, aber ich weiß nicht, wie ich dieses Ereignis auslösen soll.wie Drag & Drop-Akteure auf libgdx scene2d?

Bitte versuchen Sie mir zu helfen, meine eigene Architektur zu verwenden.

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

Antwort

9

Werfen Sie einen Blick auf das Beispiel in den libgdx Beispielen. Hier ist die Drag & Drop-Test von den Libgdx Testklassen: DragAndDropTest

Wenn Sie nur ziehen möchten/schieben Sie Ihren Schauspieler um Sie GestureListener, um es hinzuzufügen brauchen und geben Sie Ihre Bühne zum Inputprocessor wie folgt aus: Gdx.input.setInputProcessor(stage);. Hier ist die GestureDetectorTest von libgdx. Bei Drag-Events ist es der Flinglistener.

2

In Ihrem Haupt gamescreen Klasse einen Multiplexer hinzufügen, damit Sie Ereignisse aus verschiedenen Klassen zugreifen können:

private InputMultiplexer inputMultiplexer = new InputMultiplexer(this); 

Nach dem gamescreen Konstruktor hinzufügen, als Beispiel:

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

In Ihrer Klasse, die unter Verwendung Die Akteure verwenden einen DragListener als und Beispiel:

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

     } 

    })); 
6

Wenn Sie nicht wollen o verwenden DragAndDrop Klasse, können Sie diese verwenden:

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: Methode drag statt touchDragged

Verwandte Themen