用户点击进行碰撞检测

时间:2014-07-29 23:13:17

标签: java android libgdx game-engine

我很快就开始使用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");
        }
    }   
}

点击代码似乎不起作用。

如果有人解释了他们的答案我真的很感激。 感谢

2 个答案:

答案 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