2017-01-10 4 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"メソッドですが、私はこのクラスに渡したい 'myPlayer'への参照を含んでいるので、私の 'MainScreen'クラスにジェスチャリスナを作成したいと思いますが、リスナを作成する方法がわかりません。これまでのところ私は、コンストラクタでこれを持っている:

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); 
    } 
関連する問題