【问题标题】:Collision detection Libgdx rectangles碰撞检测 Libgdx 矩形
【发布时间】:2014-11-25 08:08:08
【问题描述】:

我正在尝试为我的游戏使用矩形实现碰撞检测,但似乎无法正常工作。

当每帧按下空格键时,项目符号会更新,以便它们在屏幕上移动。显然,我在这里被告知,碰撞盒也随之移动。我通过使用 sprite.getBoundingBox() 来得到这个,它为每个实例设置一个数据字段 Rectangle 到这个值。

我有两个数组列表,一个是怪物实例,一个是子弹实例。它们都有相关的碰撞矩形。

只要子弹或怪物数组列表中有内容,我就会在每一帧的主渲染循环中调用checkCollisions() 方法。

/*this handles collisions between bullets and enemies*/
public static void checkCollisions(){
    for (int i = 0; i < Main.currentBullets.size(); i++){
        for (int k = 0; k < Main.currentMonsters.size(); k++){
            if (Intersector.overlaps(Main.currentBullets.get(i).collisionBoxBullet,
                  Main.currentMonsters.get(k).collisionBoxMonster)){
                     System.out.println("Boom headshot");
                }
        }
    }

这不应该在每次重叠时都进行爆头爆头吗?相反,它似乎总是不断评估为真。

为什么它一直评估为真并写爆头?

【问题讨论】:

  • 方法sprite.getBoundingRectangle() 确实为Sprite 创建了一个BoundingRectangle。这意味着,当您移动Sprite 时,它不是更新的参考。因此,要使collisionBoxBullet 和collisionBoxMonster 保持最新,您需要在每一帧中调用sprite.getBoundingRectangle。还要确保Bullets 和Monsters 不会太快,这样它们就不会“穿过”彼此!
  • 非常感谢,我每次都在更新边界矩形,但它仍然总是说“爆头”并评估为真。如果条件评估为真,为什么会这样?
  • 这很难说...在if-条件之前尝试System.out.println() 并打印出2 collisionBoxes。然后向我展示几项检查的结果,而不仅仅是一项。

标签: java eclipse libgdx game-physics


【解决方案1】:

我没有做的是将精灵矩形的位置设置为 0.0。然后我也没有使用collisionBox.setPosition() 正确移动碰撞框。

它最初检查 0/0 处的精灵是否与 0.0 处的碰撞框发生碰撞,这始终是正确的,因此总是说它是重叠的。

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多