2014-11-25 145 views
0

我试图为我的游戏实现使用矩形的碰撞检测,但似乎无法使其工作。碰撞检测Libgdx矩形

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

我有两个Arraylists,一个持有Monsters的实例和一个持有Bullets的实例。他们都有与之相关的collisionRectangles。

只要有子弹或怪物arraylist中的东西,我从每个帧的主要渲染循环调用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"); 
       } 
     } 
    } 

不应该这样做每次它重叠爆炸爆头?相反,它总是似乎继续评估为真。

为什么它一直在评估真实和写热潮爆头?

+0

'sprite.getBoundingRectangle()'方法为'Sprite'创建了一个'BoundingRectangle'。这意味着,当你移动'Sprite'时,它不是一个引用,它会被更新。因此,为了保持'collisionBoxBullet'和'collisionBoxMonster'为最新,您需要每帧调用'sprite.getBoundingRectangle'。另外请确保'子弹'和'怪物'不要斋戒,这样它们就不会彼此“隧道”! – Springrbua 2014-11-25 09:30:46

+0

非常感谢,我每次都更新边界矩形,但它总是说“热潮爆头”并评估为真。为什么这是有条件评估为真? – 2014-11-26 02:20:16

+0

这很难说......在if条件之前尝试'System.out.println()'并打印出2个'collisionBox'。然后向我展示一些检查的结果,而不仅仅是一个。 – Springrbua 2014-11-26 06:37:56

回答

0

我没有做的是设置在0.0的精灵的矩形的位置。我也没有正确移动碰撞盒collisionBox.setPosition()

它首先检查0/0处的sprite是否与0.0处的碰撞盒碰撞,因为它始终为真,因此总是说它是重叠的。