刚刚点击了Libgdx鼠标

时间:2013-07-14 22:28:31

标签: java libgdx

我试图在鼠标刚刚点击时获取,而不是在按下鼠标时。 我的意思是我在循环中使用代码,如果我检测到鼠标是否被按下,代码将执行很多时间,但我只想执行代码一次,当鼠标刚刚点击时。

这是我的代码:

if (Gdx.input.isButtonPressed(Input.Buttons.LEFT)){

            //Some stuff
}

3 个答案:

答案 0 :(得分:12)

您可以使用Gdx.input.justTouched(),在单击鼠标的第一帧中为true。或者,正如另一个答案所述,您可以使用InputProcessor(或InputAdapter)并处理touchDown事件:

Gdx.input.setInputProcessor(new InputAdapter() {
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        if (button == Buttons.LEFT) {
            // do something
        }
    }
});

答案 1 :(得分:10)

请参阅http://code.google.com/p/libgdx/wiki/InputEvent - 您需要处理输入事件而不是轮询,方法是扩展InputProcessor并将自定义输入处理器传递给Gdx.input.setInputProcessor()。

编辑:

public class MyInputProcessor implements InputProcessor {
   @Override
   public boolean touchDown (int x, int y, int pointer, int button) {
      if (button == Input.Buttons.LEFT) {
          // Some stuff
          return true;     
      }
      return false;
   }
}

无论你想用哪个:

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

如果发现使用此模式更容易:

class AwesomeGameClass {
    public void init() {
        Gdx.input.setInputProcessor(new InputProcessor() {
            @Override
            public boolean TouchDown(int x, int y, int pointer, int button) {
                if (button == Input.Buttons.LEFT) {
                    onMouseDown();
                    return true;
                }
                return false
            }

            ... the other implementations for InputProcessor go here, if you're using Eclipse or Intellij they'll add them in automatically ...
        });
    }

    private void onMouseDown() {
    }
}

答案 2 :(得分:0)

没有InputProcessor,您可以在渲染循环中使用以下简单方法:

@Override
public void render(float delta) {
    if(Gdx.input.isButtonJustPressed(Input.Buttons.LEFT)){
        //TODO:
    }
}