碰撞准确性

不太确定如何说这个,但我一直在使用

if (CGRectIntersectsRect(ball.frame, bottom.frame)) { [self finish ]; } 

对于我的碰撞检测,它完美地运行代码,但球有时会碰撞到底部并运行代码,但是您可以清楚地看到物体之间存在间隙。 我创造了我自己的形象,他们没有背景。 我想知道是否有任何其他的编码方式或使它不运行的代码,直到相交x的像素量彼此的方式。

你可以用很多方式实现球线碰撞。 你的解决scheme实际上是一个矩形 – 矩形的碰撞检测。 这是我在一个小型的游戏项目中做到的。 它给了我最好的结果,它很简单。

假设一个球有一个ballRadius和一个位置(xBall, yBall) 。 该行由两个点(xStart, yStart)(xEnd, yEnd)

实现一个简单的碰撞检测:

 float ballRadius = ...; float x1 = xStart - xBall; float y1 = yStart - yBall; float x2 = xEnd - xBall; float y2 = yEnd - yBall; float dx = x2 - x1; float dy = y2 - y1; float dr = sqrtf(powf(dx, 2) + powf(dy, 2)); float D = x1*y2 - x2*y1; float delta = powf(ballRadius*0.9,2)*powf(dr,2) - powf(D,2); if (delta >= 0) { // Collision detected } 

如果增量大于零,则球(圆)与线之间有两个交点。 如果三angular洲等于零有一个十字路口 – 完美的碰撞。