当前位置: 首页 > 知识库问答 >
问题:

通过用户点击进行碰撞检测 [重复]

田鹤轩
2023-03-14

我很快就开始使用libGDX,我正在制作一个游戏,其中水滴从屏幕顶部落下,用户应该在触摸屏幕底部之前点击它们。我在知道用户是否确实点击了飞沫来执行某些操作时遇到了问题。

这是我的渲染方法

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

屠德宇
2023-03-14

在二维空间中,我使用以下方法来检测玩家点击的位置:https://stackoverflow.com/a/24511980/2413303

但是在你的情况下,我认为问题只是你使用了Gdx.input.getX()Gdx.input.getY()而不是你从cam.unproject(touchPos)获得的坐标,根据同一问题的另一个答案:https://stackoverflow.com/a/24503526/2413303。

岳高明
2023-03-14

您正在测试单个点的触觉,而不是在对象周围的边界框中。使用以下方法测试边界框内的触觉:

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");
   }
}

我假设一个底部/左侧的原点,所以如果你使用不同的符号,只需相应地改变标志。

 类似资料:
  • 碰撞检测 现在你知道了如何制造种类繁多的图形对象,但是你能用他们做什么?一个有趣的事情是利用它制作一个简单的 碰撞检测系统 。你可以用一个叫做:hitTestRectangle 的自定义的函数来检测两个矩形精灵是否接触。 hitTestRectangle(spriteOne, spriteTwo) 如果它们重叠, hitTestRectangle 会返回 true。你可以用 hitTestRect

  • 本节暂未进行完全的重写,错误可能会很多。如果可能的话,请对照原文进行阅读。如果有报告本节的错误,将会延迟至重写之后进行处理。 当试图判断两个物体之间是否有碰撞发生时,我们通常不使用物体本身的数据,因为这些物体常常会很复杂,这将导致碰撞检测变得很复杂。正因这一点,使用重叠在物体上的更简单的外形(通常有较简单明确的数学定义)来进行碰撞检测成为常用的方法。我们基于这些简单的外形来检测碰撞,这样代码会变得

  • 我使用时间线动画线,但我不能检测碰撞。这是一个简短的例子,我基本上是在尝试做什么。 我使用了我在堆栈溢出中找到的其他一些代码,方法,想法。就像下面这样: 以及此代码的一些变体。 任何想法都会有所帮助

  • 因此,我创建了一个方法来检测球形球和矩形球之间的碰撞。我把它分成了4部分;它检测圆的顶部、圆的左侧、圆的底部、圆的右侧和矩形之间的碰撞。其中的两个工作是检测圆上的左点和矩形之间的碰撞,以及检测圆上的右点和矩形之间的碰撞。但是,不起作用的是,如果最上面的点或最下面的点接触矩形,就不会检测到碰撞,正如我记录if语句以查看是否输入它时所看到的那样。下面是我的代码(方法。getr()获取圆圈半径): 我已

  • 我有一个带有3D模型实例的3D场景;我想做冲突检测。我目前正在遵循本教程(http://blog.xoppa.com/using-the-libgdx-3d-physics-bullet-wrapper-part1/)。然而,我想要的有点复杂。 有一个角色(一个knight.g3db模型,是Libgdx基本3d模型类的示例代码的一部分),它可以用剑攻击。我还有另一个模型实例,我想用剑“攻击”它。

  • 我正在努力通过tiledmap实现一个碰撞检测系统。我有一个2d“口袋妖怪风格”的游戏,有一个平铺的地图渲染。具体来说,我的平铺地图中有一个“碰撞”层。我希望与播放器和其他实体进行交互的tmx文件。我的问题是,我如何将播放器sprite(扩展Sprite类)连接到tiledmap的“碰撞”层,并导致两者之间的碰撞。感谢任何建议。