我触球后我的分数没有增加。它仅在我触摸球及其靠近屏幕中心时递增。 当我的球只在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();
}
}
答案 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}}方法。