Java Libgdx:暂停而不触发justtouch

Java Libgdx:暂停而不触发justtouch,java,libgdx,Java,Libgdx,我最近问过,它工作得很完美,我唯一的问题是整个游戏都是基于触摸事件的,当用户触摸屏幕时,就会创建一个对象 现在发生的是,当用户触摸“暂停”按钮纹理打包器时,将创建一个对象并暂停游戏。我想防止在触摸暂停时创建对象。我过去可以做这样的事情: private Vector3 touchPos; touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0); camera.unproject(touchPos); if (Gdx.input.justTo

我最近问过,它工作得很完美,我唯一的问题是整个游戏都是基于触摸事件的,当用户触摸屏幕时,就会创建一个对象

现在发生的是,当用户触摸“暂停”按钮纹理打包器时,将创建一个对象并暂停游戏。我想防止在触摸暂停时创建对象。我过去可以做这样的事情:

private Vector3 touchPos; 
touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0); 
camera.unproject(touchPos); 

if (Gdx.input.justTouched()) {
 if (touchPos.x > pauseX && touchPos.x < pauseX + pauseX) {
  if (touchPos.y > pauseY && touchPos.y < pauseX + pauseY) {
   setGamePause(!getGamePause());
  }}}
如果pauseX和pauseY分别是矩形/按钮的左位置和右位置,则它位于屏幕的左上角

您需要按钮/矩形区域的宽度和高度,比如假设buttonWidth,buttonHeight

请检查测试:

public class GdxTest extends Game  implements  InputProcessor{

    private Stage stage;
    Vector3 vector3;
    TextButton button;
    float pauseX,pauseY;

    @Override
    public void create() {

        vector3=new Vector3();
        ExtendViewport extendViewport=new ExtendViewport(700,1200,new OrthographicCamera());
        stage=new Stage(extendViewport);

        Skin skin=new Skin(Gdx.files.internal("skin/uiskin.json"));
        skin.get("font-label", BitmapFont.class).getRegion().getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);

        pauseX=300;
        pauseY=500;
        button=new TextButton("Pause",skin);
        button.setPosition(pauseX,pauseY);

        stage.addActor(button);
        Gdx.input.setInputProcessor(this);
    }

    @Override
    public void render() {
        super.render();

        Gdx.gl.glClearColor(0,1,1,1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        stage.draw();
        stage.act();

        ////Touch Detection without processor

        vector3.set(Gdx.input.getX(),Gdx.input.getY(),0);
        stage.getCamera().unproject(vector3);

        if(Gdx.input.justTouched()){
             if(vector3.x>pauseX && vector3.x<pauseX+button.getWidth()  && vector3.y>pauseY && vector3.y<pauseY+button.getHeight())
                 System.out.println("TOuched");
         }

         ///////
    }

    @Override
    public void resize(int width, int height) {
        super.resize(width,height);
        stage.getViewport().update(width,height);
    }

    @Override
    public void dispose() {
       stage.dispose();
    }

    @Override
    public boolean keyDown(int keycode) {
        return false;
    }

    @Override
    public boolean keyUp(int keycode) {
        return false;
    }

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

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button1) {

        vector3.set(screenX,screenY,0);
        stage.getCamera().unproject(vector3);

        if(vector3.x>pauseX && vector3.x<pauseX+button.getWidth() && vector3.y>pauseY && vector3.y<pauseY+button.getHeight())
            System.out.println("TOuched");


        return false;
    }

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

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        return false;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        return false;
    }

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

不确定纹理打包机与此有何关系?@1BLASTONE这么说是我以错误的方式实现了上述方法?或者还有其他方法吗?我的意思是,我不太清楚你对标题的意思,所以你只想在按下按钮时停止/恢复一切,包括对象创建?看一看并为所有东西创建系统,然后在游戏完成后停止调用engine.update。当然,把暂停按钮放在引擎外面,这样你就可以继续了:@1blustone是的,我不想触发,只是按一下,或者正如你说的,不起作用,请检查我更新的问题,也许是我的错,我在我的答案中添加了一个测试类。我今晚会测试它,让你知道,我测试的第一部分不起作用,左,忘了测试公共布尔触地测试TestClass的第一部分?
if(Gdx.input.justTouched()) {
   if (touchPos.x > pauseX && touchPos.x < pauseX + button.getWidth()) {
      if (touchPos.y > pauseY && touchPos.y < pauseY + button.getHeight()) {
          setGamePause(!getGamePause());
      }
   }
}
public class GdxTest extends Game  implements  InputProcessor{

    private Stage stage;
    Vector3 vector3;
    TextButton button;
    float pauseX,pauseY;

    @Override
    public void create() {

        vector3=new Vector3();
        ExtendViewport extendViewport=new ExtendViewport(700,1200,new OrthographicCamera());
        stage=new Stage(extendViewport);

        Skin skin=new Skin(Gdx.files.internal("skin/uiskin.json"));
        skin.get("font-label", BitmapFont.class).getRegion().getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);

        pauseX=300;
        pauseY=500;
        button=new TextButton("Pause",skin);
        button.setPosition(pauseX,pauseY);

        stage.addActor(button);
        Gdx.input.setInputProcessor(this);
    }

    @Override
    public void render() {
        super.render();

        Gdx.gl.glClearColor(0,1,1,1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        stage.draw();
        stage.act();

        ////Touch Detection without processor

        vector3.set(Gdx.input.getX(),Gdx.input.getY(),0);
        stage.getCamera().unproject(vector3);

        if(Gdx.input.justTouched()){
             if(vector3.x>pauseX && vector3.x<pauseX+button.getWidth()  && vector3.y>pauseY && vector3.y<pauseY+button.getHeight())
                 System.out.println("TOuched");
         }

         ///////
    }

    @Override
    public void resize(int width, int height) {
        super.resize(width,height);
        stage.getViewport().update(width,height);
    }

    @Override
    public void dispose() {
       stage.dispose();
    }

    @Override
    public boolean keyDown(int keycode) {
        return false;
    }

    @Override
    public boolean keyUp(int keycode) {
        return false;
    }

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

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button1) {

        vector3.set(screenX,screenY,0);
        stage.getCamera().unproject(vector3);

        if(vector3.x>pauseX && vector3.x<pauseX+button.getWidth() && vector3.y>pauseY && vector3.y<pauseY+button.getHeight())
            System.out.println("TOuched");


        return false;
    }

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

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        return false;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        return false;
    }

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