2014-02-22 41 views
1

你好我一直在試圖創建一個簡單的遊戲使用Libgdx框架一段時間卡住了。移動演員與手勢監聽器Libgdx

我有與背景圖像演員和被放置在載物臺的中心的棒圖圖像演員的階段。

在閱讀了很多關於stackoverflow和事件處理的libgdx wiki的帖子之後,我看不到如何將事件如投擲和平移傳遞給actor以簡單地將它移動到屏幕上。

我將不勝感激任何幫助或解釋如何確切工作。

我只是不知道如何從鍋從一扔整數值和速度值進入我的演員的Vector2位置變量,以便它可以在每次渲染方法被調用時走動。

下面是我的一些代碼:

我GestureDetection類:

public class GestureDetection implements GestureListener{ 

    public GestureDetection(){ 
    } 

    @Override 
    public boolean touchDown(float x, float y, int pointer, int button) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean tap(float x, float y, int count, int button) { 
     System.out.println("tapped"); 
     return false; 
    } 

    @Override 
    public boolean longPress(float x, float y) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean fling(float velocityX, float velocityY, int button) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean pan(float x, float y, float deltaX, float deltaY) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean panStop(float x, float y, int pointer, int button) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean zoom(float initialDistance, float distance) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, 
      Vector2 pointer1, Vector2 pointer2) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

我的遊戲類

public class Game implements Screen{ 

    StickFlick game; 
    SpriteBatch batch; 
    Texture gameBackground; 
    Stage stage; 
    GestureDetector gd; 
    InputMultiplexer im; 
    WalkingEnemy testEnemy; 

    public Game(StickFlick game){ 
     this.game = game; 
     testEnemy = new WalkingEnemy("basic", 100, Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2); 
    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

     //enemy1.update(delta); 
     System.out.println(""); 

     stage.act(Gdx.graphics.getDeltaTime()); 

     batch.begin(); 
     stage.draw(); 
     batch.end(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     stage = new Stage(width, height, true); 
     stage.clear(); 

     gd = new GestureDetector(new GestureDetection()); 
     im = new InputMultiplexer(gd, stage); 
     Gdx.input.setInputProcessor(im); 

     Texture gameBackground = new Texture("data/gameBackground.png"); 
     Image backgroundImage = new Image(gameBackground); 
     backgroundImage.setWidth(Gdx.graphics.getWidth()); 
     backgroundImage.setHeight(Gdx.graphics.getHeight()); 
     stage.addActor(backgroundImage); 

     stage.addActor(testEnemy.getImage()); 

     stage.addAction(Actions.sequence(Actions.alpha(0), Actions.fadeIn(1))); 

    } 

    @Override 
    public void show() { 
     batch = new SpriteBatch(); 
    } 

    @Override 
    public void hide() { 

    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void dispose() { 

    } 

} 

回答

1

好了,在開始你必須做出一些變量,在那裏你會保持你的棍子男人的X和Y座標。爲它們設置一些初始值,即x應該是屏幕寬度的一半,屏幕高度是屏幕高度的一半,讓您的手柄位於屏幕的中心。

然後,你必須使用信息您得到您的GestureListener實現移動你堅持人,那就是改變它的座標。你當前的實現絕對沒有 - 方法是空的,所以當某些手勢發生時,你的代碼不會對它做出反應。

所以,你可以即你的盤法內使用DELTAX和移動deltaY改變這些值棒男人座標。喜歡的東西:

X+=deltaX; 
y+=deltaY; 

或者你可以用一些常數乘DELTAX和移動deltaY,如果你想更快或更慢的移動和/或乘以移動deltaY與-1,如果運動是相反的方式從你希望它是什麼。

或者,如果你想使用一扔使用該方法提供了這些變量 - velocityX和velocityY - 將它們添加到你堅持人x和y來移動它。

所以基本上,你總是繪製棒男子在X,Y COORDS和GestureListener接口的一些方法你實現你應該改變堅持人COORDS,讓他移動。

+0

謝謝,非常感謝。 – resw67