【发布时间】: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()并打印出2collisionBoxes。然后向我展示几项检查的结果,而不仅仅是一项。
标签: java eclipse libgdx game-physics