如何让LibGDX仅检测单次轻触/点击?

3

我想要做一个简单的计数器,每次点击都会将计数器加一。我可以让计数器工作,但当我按住手指/鼠标点击时,它也会疯狂地增加。

代码:

public void render() {
    boolean isTouched = Gdx.input.isTouched();

    if (isTouched) {
        System.out.println(Cash);
        Cash++;

    }

}

另外,我在这里想问一下,如何打印一个每次点击都会改变的 整数/浮点数

例如:font.draw(batch, Cash, 300, 260);

直接使用无法正常工作。

2个回答

5

您正在进行的是轮询输入。但是为了达到您想要的效果,InputProcessor 是更好的选择:

public class MyInputProcessor implements InputProcessor {
   @Override
   public boolean keyDown (int keycode) {
      return false;
   }

   @Override
   public boolean keyUp (int keycode) {
      cash++; //<----
      return false;
   }

   @Override
   public boolean keyTyped (char character) {
      return false;
   }

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

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

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

   @Override
   public boolean touchMoved (int x, int y) {
      return false;
   }

   @Override
   public boolean scrolled (int amount) {
      return false;
   }
}

将其设置在您的创建代码中:

MyInputProcessor inputProcessor = new MyInputProcessor();
Gdx.input.setInputProcessor(inputProcessor);

参考文献:Libgdx Wiki Event-Handling

如何打印一个整数/浮点数,每次点击都会更改?
就像这样:font.draw(batch, Cash, 300, 260);
直接这样不行。

BitmapFont#draw 接受一个字符串,而不是 int /float。您必须使用以下之一:

Integer.toString(Cash); //or
Float.toString(Cash);

提示:不要以大写字母开头命名变量,应该是cash


4

1
没错,我忘了提到这一点。顺便说一下,当多点触控是必须的时候(例如平台游戏),我有时会使用InputPolling。由于处理器可能存在问题或者是Android系统的问题,我遇到了很多奇怪的触摸事件,这在很常见。 - Daahrien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接