我在屏幕上随机生成了许多圆圈并向不同方向移动。我现在正在处理它们之间的冲突。下面的代码只是将屏幕上的任何圆圈与任何其他圆圈进行比较,并且应该通过经典公式检测碰撞。它或多或少有效,我的问题是我需要使用尝试发现的“神奇数字”,我无法弄清楚原因。 (每个圆都有相同的半径)
代码:
Target item1, item2;
int magicNumber = 40;
float dX, dY;
for (int i = len; --i >= 0;) {
item1 = activeTargets.get(i);
for(int j = len; --j >= 0;){
if(i!=j) {
item2 = activeTargets.get(j);
dX = (item1.getPosition().x > item2.getPosition().x) ? item1.getPosition().x - item2.getPosition().x : item2.getPosition().x - item1.getPosition().x;
dY = (item1.getPosition().y > item2.getPosition().y) ? item1.getPosition().y - item2.getPosition().y : item2.getPosition().y - item1.getPosition().y;
if ( (dX*dX) + (dY*dY) < (magicNumber*4*item1.body.radius*item1.body.radius) ) {
// if(item1.body.overlaps(item2.body)) {
if(!activeTargets.get(i).collide && !activeTargets.get(j).collide ) {
activeTargets.get(i).collide = true;
activeTargets.get(j).collide = true;
Gdx.app.log("COLLIDE", "Collision between " + activeTargets.get(i).color.toString() + " and " + activeTargets.get(j).color.toString());
}
}
}
}
}