Libgdx - 两个动圈之间的碰撞

时间:2015-06-23 17:31:03

标签: java libgdx geometry collision

我在屏幕上随机生成了许多圆圈并向不同方向移动。我现在正在处理它们之间的冲突。下面的代码只是将屏幕上的任何圆圈与任何其他圆圈进行比较,并且应该通过经典公式检测碰撞。它或多或少有效,我的问题是我需要使用尝试发现的“神奇数字”,我无法弄清楚原因。 (每个圆都有相同的半径)

代码:

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());
                    }
                }
            }
        }
    }

0 个答案:

没有答案