【问题标题】:Libgdx TouchListner on gameObjects (Phone Screen)游戏对象(手机屏幕)上的 Libgdx TouchListner
【发布时间】:2018-12-30 08:39:44
【问题描述】:

我的 TouchListener 在 Libgdx 游戏中出现问题。

在我的 Gamerenderer 上我有这个:

    private OrthographicCamera camera;
    private Vector3 input;

    private Array<Objects> objects;
    private SpriteBatch batch;
    
    //In Constructor
    camera = new OrthographicCamera();
        camera.setToOrtho(false, Configuration.screenWidth, Configuration.screenHeight);

    batch = new SpriteBatch();
    batch.setProjectionMatrix(camera.combined);
    objects = myGame.Objects();
    input = new Vector3(0, 0, 0);
    
    //My Renderer
    public void render(float runtime){
        Gdx.app.log("GameRenderer: ", "Render()");

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

        input.x = Gdx.input.getX();
        input.y = Gdx.input.getY();
        camera.unproject(input);
        batch.begin();

        for (Objects object:objects) {
                                object.getFont().draw(batch,object.getGlyphLayout(),object.getX(),object.getY());
            object.getRec().set(object.getX(),object.getY(),object.getGlyphLayout().width,object.getGlyphLayout().height);
            if(Gdx.input.isTouched()){
                Gdx.app.log("Clicked", "Touched");
                if(object.getRec().contains(input.x, input.y)) {
                        Gdx.app.log("Clicked", "Great");
                    }
                    else {
                        Gdx.app.log("Clicked", "Noooooooooooo");
                    }
                }
            }
        }
        batch.end();
    }

当我运行我的游戏时,它工作正常,除了触摸监听器有时工作正常,但在触摸几秒钟后。

Gdx.app.log("Clicked", "Touched");触摸时触发。

但是 Gdx.app.log("Clicked", "Great");或 Gdx.app.log("Clicked", "Nooooooooooooo");我必须长按直到触发触摸。

谢谢

编辑

我添加了一个 ShapeRenderer 来查看我的对象到底做了什么:

shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
        for(Objects object:objects) {
            shapeRenderer.setColor(255 / 255.0f, 0 / 255.0f, 0 / 255.0f, 1);
            shapeRenderer.rect(object.getRec().x, object.getRec().y, object.getRec().width, object.getRec().height);

            shapeRenderer.setColor(0 / 255.0f, 0 / 255.0f, 255 / 255.0f, 1);
            shapeRenderer.rect(object.getX(), object.getY(), object.getGlyphLayout().width, object.getGlyphLayout().height);
        }
        shapeRenderer.end();

然后我有这个结果:

黑色矩形是对象,蓝色矩形是对象矩形的ShapeRenderer之上的对象的ShapeRenderer。

现在当我点击对象时它不会触发点击,但是当我点击 ShapeRenderer 时它会触发它。

【问题讨论】:

    标签: java android input libgdx


    【解决方案1】:

    检查这个解决方案:

    @Override
    public void create() {
        // Codes
        Gdx.input.setInputProcessor(new InputAdapter () {
            @Override
            public boolean touchDown(int screenX, int screenY, int pointer, int button) {
                // Insert your code
                return true;
            }
        }
        );
        //Codes
    }
    

    Gdx.input.isTouched() 放在循环中并不是一个好主意。

    【讨论】:

    • 谢谢我已经将我的 touchListener 更改为实现 InputProcessor 的类,但它没有解决问题。
    【解决方案2】:

    最后我解决了,以防万一有人遇到同样的问题:

    object.getRec().set(object.getX(),object.getY(),object.getGlyphLayout().width,object.getGlyphLayout().height);

    我替换了 object.getY()

    使用 object.getY()-object.getGlyphLayout().height

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      相关资源
      最近更新 更多