android - 简单的碰撞检测 - Android

标签 android collision-detection

我想在类似乒乓球的游戏中进行非常简单的碰撞检测。 球是正方形, Racket (球棒)是矩形。

我有两个实体可以获取当前的 X 和 Y 位置以及位图高度和宽度。最简单的方法是什么?

我有这个代码:

public void getCollision(Entity enitityOne, Entity enitityTwo){

    double eventCoordX = (enitityOne.getCenterX() - (enitityTwo.getBitmapWidth() / 2));
    double eventCoordY = (enitityOne.getCenterY() - (enitityTwo.getBitmapHeight() / 2));

    double X = Math.abs(enitityTwo.getxPos() - eventCoordX);
    double Y = Math.abs(enitityTwo.getyPos() - eventCoordY);

    if(X <= (enitityTwo.getBitmapWidth()) && Y <= (enitityTwo.getBitmapHeight())){
        enitityOne.collision();
        enitityTwo.collision();
    }
}

但我很盲目,这只适用于桨的中间,而不适用于两侧。 问题是我看不出代码哪里错了。 有人吗? 有人有更好的主意吗?

最佳答案

如果您想要的只是查找 2 个给定矩形是否以某种方式相交(因此发生碰撞),这是最简单的检查(C 代码;随意使用浮点值):

int RectsIntersect(int AMinX, int AMinY, int AMaxX, int AMaxY,
                   int BMinX, int BMinY, int BMaxX, int BMaxY)
{
    assert(AMinX < AMaxX);
    assert(AMinY < AMaxY);
    assert(BMinX < BMaxX);
    assert(BMinY < BMaxY);

    if ((AMaxX < BMinX) || // A is to the left of B
        (BMaxX < AMinX) || // B is to the left of A
        (AMaxY < BMinY) || // A is above B
        (BMaxY < AMinY))   // B is above A
    {
        return 0; // A and B don't intersect
    }

    return 1; // A and B intersect
}

矩形 A 和 B 由其角点的最小和最大 X 和 Y 坐标定义。

嗯... This has been asked before .

关于android - 简单的碰撞检测 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7610129/

相关文章:

android - 尝试添加库,但使用 Gradlew Clean : Build Fails in Android Studio

Android:通过 MTP 连接时如何检测 MediaStore 的变化

android - Firebase Firestore - 移动 SDK 和 Web SDK 之间的差异

彩球碰撞

javascript - D3 力图 - 固定不重叠的节点

java - 如何使用图像进行碰撞检测?

android - 如何暂停我的应用程序?

android - 将 String 与多个 ListView 项目进行比较

collision-detection - 与矩形以外的形状碰撞..?

java - 获取双速度 vector 以正确计算而无需舍入