触摸代码仅使用libgdx在我的球类游戏的屏幕中心工作

时间:2017-02-14 16:32:47

标签: android libgdx

我触球后我的分数没有增加。它仅在我触摸球及其靠近屏幕中心时递增。 当我的球只在x轴上移动时保持y不变,触摸工作正常。但是当两者都增加时,只有在中心触摸时,分数才会增加。

@Override
public void render () {


    batch.begin();

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

    batch.draw(ball,xposi,yposi,100,100);

    if(gameState==1) {


        if (Gdx.input.justTouched()) {

            tmp = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
            textureBounds = new Rectangle(xposi, yposi, 100, 100);

            if (textureBounds.contains(tmp.x, tmp.y)) {
                Gdx.app.log("Click", "On Ball");
                score++;
                } 
           else {
                Gdx.app.log("Click", "Not on Ball");
                }
            }



        font.draw(batch, String.valueOf(score), 100, 300);
        font.draw(batch, String.valueOf(lives), 200, 300);

        xposi+=velocity;
        yposi+=velocity;

        if (xposi >= xmax - 100) {

            velocity = -velocity;
        } else if (xposi <= xmin) {

            velocity = -velocity;
        }

        if (yposi >= ymax - 100) {

            velocity = -velocity;
        } else if (yposi <= ymin) {

            velocity = -velocity;
        }

        batch.end();
     }
 }

1 个答案:

答案 0 :(得分:3)

在libgdx中,当我们在屏幕上绘制内容时,屏幕原点位于左下角,但是当我们检测到触摸时,屏幕原点位于左上角。

当你处理水平移动时,没有y坐标的参与,所以它的工作正常。当你的球在中心时,你会发现球上的触碰,那么Gdx.input.getY()的值与Gdx.graphics.getHeight()-Gdx.input.getY()大致相同,所以有时会有效。

这么简单的解决方案就是将触摸坐标原点反转到左下角。

tmp = new Vector3(Gdx.input.getX(),Gdx.graphics.getHeight()-Gdx.input.getY(), 0);

推荐:

不要像渲染方法那样在渲染方法中创建对象,创建Rectangle和Vector3的对象,在show()create()方法中创建对象,并在{{{{}}中为这些变量设置值1}}方法。