2013-04-29 15 views
10

Sto sviluppando un gioco usando libGDX e mi piacerebbe sapere come posso trascinare un attore. Ho realizzato il mio palco e disegnato l'attore, ma non so come attivare quell'evento.come trascinare gli attori su libgdx scene2d?

Si prega di provare ad aiutarmi usando la mia architettura.

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

risposta

9

Dai un'occhiata all'esempio negli esempi di libgdx. Ecco il drag and drop di prova dalle classi di test libgdx: DragAndDropTest

Se si desidera solo per trascinare/far scorrere l'Attore intorno è necessario aggiungere un GestureListener ad esso e passare il vostro stage per l'Inputprocessor in questo modo: Gdx.input.setInputProcessor(stage);. Questo è il GestureDetectorTest da libgdx. Per gli eventi di trascinamento è il Flinglistener.

2

Nella classe gamescreen principale aggiungere un multiplexer in modo da poter accedere agli eventi provenienti da diverse classi:

private InputMultiplexer inputMultiplexer = new InputMultiplexer(this); 

Dopo il costruttore gamescreen aggiungere come un esempio:

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

Nella classe che utilizza gli attori usano DragListener come ed esempio:

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

Se non si desidera t o usare DragAndDrop di classe, è possibile utilizzare questo:

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: metodo drag invece touchDragged

Problemi correlati