4

私はLibGdxを初めて使用し、入力処理に問題があります。

タッチダウンするたびに、プレーヤーは弾丸を発射する必要があります。しかし、このメソッドは一度だけ呼び出されるようです...

そして、ユーザーは別の弾丸を撃つためにもう一度クリックする必要があります。

クリックダウン中は常に弾丸を発射したい...

このユースケースを処理する方法はありますか?

4

3 に答える 3

6

入力イベントを取得する代わりに、タッチ入力の「ポーリング」を調べてください。したがって、renderまたはupdateメソッドでは、次のようなものを使用します。

 boolean activeTouch = false;

 if (Gdx.input.isTouched(0)) {
    if (activeTouch) {
       // continuing a touch ...
    } else {
       // starting a new touch ..
       activeTouch = true;
    }     
 } else {
    activeTouch = false;
 }
于 2013-03-10T00:35:31.260 に答える
2

コンセプトをプールすることなく、これを解決することに成功しました。

私はカスタムInputProccesorを持っていますが、PTのような同様のロジックを使用しました。タッチダウン私は弾丸を発射するスレッドを開始し、いくつかの計算を行います。これは、使用するレンダラークラスのいくつかのメソッドにアクセスするためです。

   Gdx.app.postRunnable(new Runnable() {
        @Override
        public void run() {
        // process the result, e.g. add it to an Array<Result> field of the ApplicationListener.
        shootBullet(screenX, screenY);
        }
    });

OpenGLコンテキスト例外を回避するため。

touchUp方式では、撮影スレッドをキャンセルします。

アイデアのためのTnx!

于 2013-03-10T09:50:07.757 に答える
2

連続入力ハンドルを使用しています

これは、アクターにフラグを設定することによって行われます。例:

public class Player{
  private boolean firing = false;
  private final Texture texture = new Texture(Gdx.files.internal("data/player.png"));

  public void updateFiring(){
    if (firing){
        // Firing code here
        Gdx.app.log(TAG, "Firing bullets");
    }
  }

  public void setFiring(boolean f){
    this.firing  = f;
  }

  Texture getTexture(){
    return this.texture;
  }

}

今私のApplicationクラスでInputProcessorを実装しています

@Override
public void create() {
    player= new Player();
    batch = new SpriteBatch();
    sprite = new Sprite(player.getTexture());
    Gdx.input.setInputProcessor(this);
}
@Override
public void render() {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.begin();
    sprite.draw(batch);
    // Update the firing state of the player
    enemyJet.updateFiring();
    batch.end();
}

@Override
public boolean keyDown(int keycode) {
    switch (keycode){
        case Input.Keys.SPACE:
            Gdx.app.log(TAG, "Start firing");
            player.setFiring(true);

    }
    return true;
}

@Override
public boolean keyUp(int keycode) {
    switch (keycode){
        case Input.Keys.SPACE:
            Gdx.app.log(TAG, "Stop firing");
            player.setFiring(false);

    }
    return true;
}

終わり

于 2016-10-02T14:10:35.250 に答える