我很快就开始使用libGDX了,我正在制作一个从屏幕顶部掉落水滴的游戏,用户应该在触摸屏幕底部之前点击它们。我有一个问题,就是知道用户是否确实点击了Droplet来做某事。
这是我的渲染方法:
Gdx.gl.glClearColor(0/255.0f, 0/255.0f, 100/255.0f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
cam.update();
if (TimeUtils.millis() - lastDrop > 333)
spawnRainDrop();
Iterator<Rectangle> iter = raindrops.iterator();
while (iter.hasNext()) {
Rectangle raindrop = iter.next();
raindrop.y -= 300 * Gdx.graphics.getDeltaTime();
if (raindrop.y + 64 < 0) {
iter.remove();
}
if (Gdx.input.isTouched()) {
Vector3 touchPos = new Vector3();
cam.unproject(touchPos);
if (Gdx.input.getX() == raindrop.x + 64 / 2 && Gdx.input.getY() == raindrop.y + 64 / 2) {
System.out.println("Tapped");
}
}
}
点击代码似乎不起作用。
如果有人解释了他们的答案我真的很感激。 感谢
答案 0 :(得分:0)
您正在测试单点处的触摸,而不是在对象周围的边界框中进行测试。使用以下方法测试边界框内的触摸:
if(Gdx.input.isTouched()) {
Vector3 touchPos = new Vector3();
cam.unproject(touchPos);
float halfWidth = 64 / 2.0f;
float halfHeight = 64 / 2.0f;
if( Gdx.input.getX() >= raindrop.x - halfWidth &&
Gdx.input.getX() <= raindrop.x + halfWidth &&
Gdx.input.getY() <= raindrop.y + halfHeight &&
Gdx.input.getY() >= raindrop.y - halfHeight ) {
System.out.println("Tapped");
}
}
我假设有一个底部/左侧原点,所以如果您使用另一个,则只需相应地更改符号。
答案 1 :(得分:0)
在二维中,我使用以下方法来检测玩家点击的位置:https://stackoverflow.com/a/24511980/2413303
但在您的情况下,我认为问题只是您使用了Gdx.input.getX()
和Gdx.input.getY()
而不是您从cam.unproject(touchPos)
获得的坐标,根据其他答案在同一个问题上:https://stackoverflow.com/a/24503526/2413303。