如何使用java.awt.geom.Area中的区域进行碰撞检测?

时间:2019-04-04 01:11:32

标签: java geometry awt

我正在使用java.awt创建游戏,并且想知道如何对Area进行高级碰撞检测。在我的游戏中,每个实体都有一个用Area制成的对撞机。通过高级碰撞检测,我的意思是我不想两个区域之间的碰撞导致实体停止,而是希望碰撞导致实体滑过。实体具有double的大小和方向值以及它们的碰撞形状的“面积”。碰撞形状应该可以是任何形状(不仅是矩形或圆形)。程序的输出应该是一个向量,当与实体结合使用时,可能会导致该实体不发生碰撞。

// Basic collision without sliding
public static boolean testCollsion(Area a, Area b) {
        Area c = (Area) a.clone();
        c.intersect(b);
        return !c.isEmpty();
}
// Advanced sliding collision
// Where b is stationary and a should change
public static void collide(Collidable a, Collidable b) {
    Area areaA = new Area(a.getCollider().shape);
    Area areaB = new Area(b.getCollider().shape);
    Area c = (Area) areaA.clone();
    c.intersect(areaB);
    if (!c.isEmpty()) {
        double directionA = a.getDirection();
        double directionB = b.getDirection();
        double magnitudeA = a.getMagnitude();
        double magnitudeB = b.getMagnitude();
        // Calculate collision vector
        double directionC = ?;
        double magnitudeC = ?;
    }
}

碰撞后,应将实体移出它所撞击的物体的区域,同时保留其速度和方向,并使其在该区域内滑动。应该用另一个矢量来完成,以抵消实体向碰撞的移动。

0 个答案:

没有答案