4

我是 LibGdx 的新手,输入处理有问题。

每当触球被按下时,我的播放器都需要发射子弹。但似乎这个方法只被调用一次......

然后用户必须再次单击以射击另一颗子弹。

我想在点击关闭时总是射击子弹......

有没有办法处理这个用例?

4

3 回答 3

6

查看触摸输入上的“轮询”,而不是获取输入事件。因此,在您的渲染或更新方法中,使用如下内容:

 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,int 我使用了类似的逻辑,比如提到的 PT。我 touchDown 我启动了发射子弹的线程并进行一些计算,因为我从 Renderer 类中访问了一些我必须使用的方法

   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;
  }

}

现在在我的应用程序类中实现 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 回答