2016-02-18 61 views
3

我用LibGDX創建了一個2D安卓遊戲,我使用正射相機在世界各地移動。LibGDX:用觸摸移動相機

爲了移動相機,玩家應該觸摸並拖動屏幕。所以如果你觸摸屏幕並向右拖動,相機應該向左移動。所以它應該像移動畫廊中縮放圖片的部分一樣。我希望你跟着我。

這是代碼:

public class CameraTestMain extends ApplicationAdapter { 

    SpriteBatch batch; 
    Texture img; 
    OrthographicCamera camera; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     img = new Texture("badlogic.jpg"); 
     camera = new OrthographicCamera(1280, 720); 
     camera.update(); 
    } 

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

     handleInput(); 
     camera.update(); 

     batch.setProjectionMatrix(camera.combined); 

     batch.begin(); 
     batch.draw(img, 0, 0); 
     batch.end(); 
    } 

    public void handleInput() { 

     // That is my problem 

    } 

} 

我不知道該怎麼在handleInput()方法寫。我知道有一個名爲InputProcessor的界面,方法爲touchDragged(int x, int y, int pointer),您可以在其中處理觸摸拖動,但我不知道如何使用它。

感謝您的想法和您的幫助。

回答

1

InputProcessor是一個界面,允許您定義在執行某些操作(如觸摸屏)時要執行的操作。

所以第一件事就是實現你的類接口:

public class CameraTestMain extends ApplicationAdapter implements InputProcessor 

然後創建()方法通過調用設置類爲InputProcessor:

//create() method 
    Gdx.input.setInputProcessor(this); 

第二個是實施touchDragged的方法。請注意,這是Xÿ參數只是相對去年指針位置因此要獲得指針的實際位置,你應該將它保存在一些全局變量着陸方法。當然你不需要這裏的絕對指針位置,因爲你只需要修改攝像頭的位置而不是設置它。

//touchDragged method 
    public boolean touchDragged(int screenX, int screenY, int pointer) { 
     camera.position.set(camera.position.x + screenX, camera.position.y + screenY); 

記得撥打camera.update()開始渲染()方法

爲了獲得更多的信息,看看at this tutorial

+0

@ erik4thewinners接受這個答案,如果它幫助你並考慮upvoting它,因爲我認爲這是一個很好的答案。 – Madmenyo

+0

screenX和screenY參數是絕對值。 – Winter

+2

這個答案是錯誤的,因爲'camera.position.set(camera.position.x + screenX,camera.position。y + screenY);'由於screenX和screenY返回鼠標在屏幕上的位置,所以發送相機飛行...而不是screenX,應該放入某種「X中的變化」,並且相同的Y .. 。 – Sierox

3

這個問題是舊的,但正如Sierox說,接受的答案將發送相機飛走,所以這裏的另一個解決方案

Gdx.input.getDeltaX()將返回的區別當前指針位置和X軸上的最後一個指針位置。

Gdx.input.getDeltaY()將返回當前指針位置和Y軸上最後一個指針位置之間的差異。

@Override 
public boolean touchDragged(int screenX, int screenY, int pointer) { 
    float x = Gdx.input.getDeltaX(); 
    float y = Gdx.input.getDeltaY(); 

    camera.translate(-x,y); 
    return true; 
}