2017-01-10 16 views
1

我現在有它處理所有我想要的手勢一類,它看起來像這樣:LibGDX:在一個單獨的類創建GestureListener

public class InputHandler implements GestureDetector.GestureListener{ 

    private Player myPlayer; 

    public InputHandler(Player player){ 
    myPlayer = player; 
    } 

    @Override 
    public boolean touchDown(float x, float y, int pointer, int button) { 
    return false; 
    } 

    @Override 
    public boolean tap(float x, float y, int count, int button) { 
    return false; 
    } 

    @Override 
    public boolean longPress(float x, float y) { 
    return false; 
    } 

    @Override 
    public boolean fling(float velocityX, float velocityY, int button) { 
    if(velocityY > 0){ 
     myPlayer.onSwipeUp(); 
    } 
    return false; 
    } 

    @Override 
    public boolean pan(float x, float y, float deltaX, float deltaY) { 
    return false; 
    } 

    @Override 
    public boolean panStop(float x, float y, int pointer, int button) { 
    return false; 
    } 

    @Override 
    public boolean zoom(float initialDistance, float distance) { 
    return false; 
    } 

    @Override 
    public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) { 
    return false; 
    } 

    @Override 
    public void pinchStop() { 

    } 
} 

正如你所看到的,我使用的唯一方法是「fling」方法,但我想在我的'MainScreen'類中創建手勢監聽器,因爲它包含對'myPlayer'的引用,我想將其傳入此類,但我不確定如何創建監聽器。到目前爲止,我有這在我的構造函數:

public class GameScreen implements Screen { 

    private GameWorld world; 
    private GameRenderer renderer; 
    GestureDetector gd; 


    public GameScreen(){ 
    float screenWidth = Gdx.graphics.getHeight(); 
    float screenHeight = Gdx.graphics.getWidth(); 
    float gameWidth = 816; 
    float gameHeight = screenHeight/(screenWidth/gameWidth); 

    int midpointY = (int)(gameHeight/2); 

    world = new GameWorld(midpointY); 
    renderer = new GameRenderer(world); 

    gd = new GestureDetector(new myGestureListener(world.getPlayer())); //Error here, 'myGestureListener' cannot be resolved 
    Gdx.input.setInputProcessor(gd); 



    } 

據我所知,「myGestureListener」從來沒有被創造的,因此不能得到解決,但我很困惑,我怎麼能解決這個錯誤,同時也確保了參考正確傳遞。如果我需要初始化一個GestureListener,我該怎麼做?

如果這個問題沒有意義或者沒有解決方案,我很抱歉,我還是使用libGDX框架進行編碼的新手。

+0

您沒有創建一個名爲'myGestureListener'的類。 – Moira

+0

除了您在下面給出的問題的答案之外,還有一點建議:嘗試從您的播放器中分離監聽器(遵循SOLID原則)如果您只需要捕捉fling()事件,可以創建一個簡單的接口()方法,讓GameScreen實現這個接口,並將抽象的GameScreen傳遞給InputHandler(FlingListener監聽器)... – evident

回答

1

您沒有稱作myGestureListener的課程?

從你的問題看來你叫它InputHandler,所以也許你使用了錯誤的名字。

+0

哦,我的,我不知道我怎麼沒有接受。非常感謝!! –

0

InputHandler是您的GestureListener實現類,因此創建該類的對象並在GestureDetector構造函數中作爲參數傳遞。

public class GameScreen implements Screen { 

    private GameWorld world; 
    private GameRenderer renderer; 
    private GestureDetector gd; 

    public GameScreen(){ 
    float screenWidth = Gdx.graphics.getHeight(); 
    float screenHeight = Gdx.graphics.getWidth(); 
    float gameWidth = 816; 
    float gameHeight = screenHeight/(screenWidth/gameWidth); 

    int midpointY = (int)(gameHeight/2); 

    world = new GameWorld(midpointY); 
    renderer = new GameRenderer(world); 

    gd = new GestureDetector(new InputHandler(world.getPlayer())); 
    Gdx.input.setInputProcessor(gd); 
    }