2013-04-29 2 views
10

Я разрабатываю игру с помощью libGDX, и я хотел бы знать, как я могу перетащить актера. Я сделал свою сцену и нарисовал актера, но я не знаю, как вызвать это событие.Как перетащить актеров на libgdx scene2d?

Пожалуйста, попробуйте помочь мне, используя мою собственную архитектуру.

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

ответ

9

Посмотрите пример в примерах libgdx. Вот перетащить тест из libgdx тестовых классов: DragAndDropTest

Если вы просто хотите, чтобы перетащить/скользить вокруг актера вы должны добавить GestureListener к нему и передать свой этап в Inputprocessor, как это: Gdx.input.setInputProcessor(stage);. Вот GestureDetectorTest от libgdx. Для событий перетаскивания это Flinglistener.

2

В вашем главном классе gamescreen добавить мультиплексор, так что вы можете получить доступ события из разных классов:

private InputMultiplexer inputMultiplexer = new InputMultiplexer(this); 

После конструктора gamescreen добавить в качестве примера:

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

В своем классе, который использует актеры используют 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); 

     } 

    })); 
6

Если вы не хотите, чтобы t о использовании 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); 
    } 
}); 

EDIT: метод drag вместо touchDragged