2013-04-29 13 views
10

Tôi đang phát triển trò chơi bằng libGDX và tôi muốn biết cách tôi có thể kéo và thả một diễn viên. Tôi đã thực hiện giai đoạn của mình và rút ra diễn viên, nhưng tôi không biết làm thế nào để kích hoạt sự kiện đó.làm thế nào để kéo và thả các diễn viên trên libgdx scene2d?

Hãy cố gắng giúp tôi sử dụng kiến ​​trúc của riêng mình.

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

Trả lời

9

Hãy xem ví dụ trong ví dụ libgdx. Đây là bài kiểm tra kéo và thả từ các lớp kiểm tra libgdx: DragAndDropTest

Nếu bạn chỉ muốn kéo/trượt diễn viên của mình xung quanh bạn cần thêm GestureListener vào nó và chuyển Giai đoạn của bạn tới bộ xử lý đầu vào như thế này: Gdx.input.setInputProcessor(stage);. Đây là số GestureDetectorTest từ libgdx. Đối với các sự kiện kéo, Flinglistener của nó.

2

Trong lớp gamescreen chính của bạn thêm một bộ đa để bạn có thể truy cập vào các sự kiện từ các lớp học khác nhau:

private InputMultiplexer inputMultiplexer = new InputMultiplexer(this); 

Sau khi các nhà xây dựng gamescreen thêm như một ví dụ:

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

Trong lớp học của bạn đang sử dụng các diễn viên sử dụng một DragListener làm ví dụ:

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

Nếu bạn không muốn t o sử dụng DragAndDrop lớp, bạn có thể sử dụng này:

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: Phương pháp drag thay touchDragged