首页 > 解决方案 > 如何使用 java.awt.geom.Area 中的区域进行碰撞检测?

问题描述

我正在使用创建游戏java.awt,并且想知道如何使用Areas 进行高级碰撞检测。在我的游戏中,每个实体都有一个用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 = ?;
    }
}

碰撞后,实体应移出它撞击的物体区域,同时保持其速度和方向,并允许它滑过该区域。这应该由另一个向量来完成,以抵消实体朝向碰撞的运动。

标签: javageometryawt

解决方案


推荐阅读