2013-04-29 14 views
10

Zajmuję się tworzeniem gry przy użyciu libGDX i chciałbym wiedzieć, jak mogę przeciągnąć i upuścić aktora. Zrobiłem swoją scenę i nakręciłem aktora, ale nie wiem, jak uruchomić to wydarzenie.jak przeciągnąć i upuścić aktorów na libgdx scene2d?

Proszę, pomóż mi użyć mojej własnej architektury.

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

Odpowiedz

9

Spójrz na przykład w przykładach libgdx. Oto przeciągnij i upuść testu z libgdx klas testowych: DragAndDropTest

Jeśli chcesz po prostu przeciągnij/przesuń aktora wokół trzeba dodać GestureListener do niego i zdać etapu do Inputprocessor jak ten: Gdx.input.setInputProcessor(stage);. Oto GestureDetectorTest z libgdx. Dla zdarzeń przeciągania jest to Flinglistener.

2

W swojej głównej klasie gamescreen dodać multiplekser, dzięki czemu można uzyskać dostęp do wydarzeń z różnych klas:

private InputMultiplexer inputMultiplexer = new InputMultiplexer(this); 

Po konstruktora gamescreen dodać jako przykład:

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

W swojej klasie, który używa aktorzy używają DragListener jako i przykład:

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

Jeśli nie chcesz O użyciu DragAndDrop klasę, można użyć to:

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: metoda drag zamiast touchDragged

Powiązane problemy