碰撞检测Libgdx矩形
问题描述:
我试图为我的游戏实现使用矩形的碰撞检测,但似乎无法使其工作。碰撞检测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.0的精灵的矩形的位置。我也没有正确移动碰撞盒collisionBox.setPosition()
。
它首先检查0/0处的sprite是否与0.0处的碰撞盒碰撞,因为它始终为真,因此总是说它是重叠的。
'sprite.getBoundingRectangle()'方法为'Sprite'创建了一个'BoundingRectangle'。这意味着,当你移动'Sprite'时,它不是一个引用,它会被更新。因此,为了保持'collisionBoxBullet'和'collisionBoxMonster'为最新,您需要每帧调用'sprite.getBoundingRectangle'。另外请确保'子弹'和'怪物'不要斋戒,这样它们就不会彼此“隧道”! – Springrbua 2014-11-25 09:30:46
非常感谢,我每次都更新边界矩形,但它总是说“热潮爆头”并评估为真。为什么这是有条件评估为真? – 2014-11-26 02:20:16
这很难说......在if条件之前尝试'System.out.println()'并打印出2个'collisionBox'。然后向我展示一些检查的结果,而不仅仅是一个。 – Springrbua 2014-11-26 06:37:56