2016-09-05 9 views

答えて

0

ユーザ入力の場合はInputProcessorを使用してください。

あなたは匿名で、あなたが書くべきショー方法で書きたい場合

: -

Gdx.input.setInputProcessor(new InputProcessor() { 

     @Override 
     public boolean touchUp(int arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean touchDragged(int arg0, int arg1, int arg2) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean touchDown(int arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean scrolled(int arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean mouseMoved(int arg0, int arg1) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean keyUp(int arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean keyTyped(char arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean keyDown(int arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 
    }); 

か、入力プロセッサを実装し、setInputProcessorでインスタンスを登録することができます。 例: - あなたが書くべきあなたの画面クラスのshowメソッドで

 public class InputTest implements InputProcessor { 

@Override 
public boolean keyDown(int arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean keyTyped(char arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean keyUp(int arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean mouseMoved(int arg0, int arg1) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean scrolled(int arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean touchDown(int arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean touchDragged(int arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean touchUp(int arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 
    return false; 
} 

}

: - 私の提案で

public void show() { 

    Gdx.input.setInputProcessor(new InputTest()); 
} 

これら二つは、あなたの場合は、ユーザー入力を取得するための最良の方法ですステージを使用していません。 これがうまくいくと思います。

0

これはユースケースによって異なります。なぜあなたはそれを必要としますか?それは完了する必要がありますかevent drivenまたはcontinuous?例えば

、あなたが特定のキーが押されながら画面上のスプライトを移動したい場合は、その後、それは継続的なアクションです:あなたはたとえば、色を変更したい場合は

@Override public void render() { 
    if (Gdx.input.isKeyPressed(Input.Keys.SPACE)) 
     sprite.translateX(speed * Gdx.graphics.getDeltaTime()); 
    ... 
} 

が、しかし、ユーザーが特定のキーを押したときには、そのイベントだ:ポーリングイベントの上に構築された便利な方法であることを

@Override public void create() { 
    Gdx.input.setInputProcessor(new InputAdapter() { 
     @Override public boolean keyUp (int keycode) { 
      if (keycode == Input.Keys.SPACE) 
       sprite.setColor(Color.RED); 
     } 
    }); 
    ... 
} 

注意、それは自分自身と非常に簡単です。以下のようなので:

private boolean moving; 
@Override public void create() { 
    Gdx.input.setInputProcessor(new InputAdapter() { 
     @Override public boolean keyDown (int keycode) { 
      if (keycode == Input.Keys.SPACE) 
       moving = true; 
     } 
     @Override public boolean keyUp (int keycode) { 
      if (keycode == Input.Keys.SPACE) 
       moving = false; 
     } 
    }); 
    ... 
} 

@Override public void render() { 
    if (moving) 
     sprite.translateX(speed * Gdx.graphics.getDeltaTime()); 
    ... 
} 

これは、多くの場合、あなたがよりきれいに書いて、そのような特定のコード、ケースを使用することができます。このことを念頭に

private float speed; 
@Override public void create() { 
    Gdx.input.setInputProcessor(new InputAdapter() { 
     @Override public boolean keyDown (int keycode) { 
      switch (keycode) { 
       case Input.Keys.LEFT: speed -= 10f; break; 
       case Input.Keys.RIGHT: speed += 10f; break; 
      } 
     } 
     @Override public boolean keyUp (int keycode) { 
      switch (keycode) { 
       case Input.Keys.LEFT: speed += 10f; break; 
       case Input.Keys.RIGHT: speed -= 10f; break; 
      } 
     } 
    }); 
    ... 
} 

@Override public void render() { 
    sprite.translateX(speed * Gdx.graphics.getDeltaTime()); 
    ... 
} 

を、多くの場合、イベントを使用するために改善することができます入力操作を扱う。しかし、多くのbooleanフラグを使用している場合は、組み込みの入力ポーリングを使用することもできます。

関連する問題