检测圆圈何时与节点相交

时间:2015-10-07 16:49:28

标签: ios swift sprite-kit

我使用ball.frame.intersects(bar.frame),其中ball = SKShapeNode(circleOfRadius: BALL_RADIUS)bar = SKShapeNode(rectOfSize: <Some CGSize object>)

虽然这是有效的,但是有一个看不见的方形圆圈。圆的直径与正方形的边相同。这个正方形是ball.frame的正方形,所以有时候,球的行为就像它与酒吧相交,但在视觉上它不是。

enter image description here

在此屏幕截图中,您可以看到球被停止,因此游戏结束,因为ball.frame.intersects(bar.frame)返回true,即使视觉上球还没有碰到酒吧。

那么如何检查球是否真正与球杆相交,而不是球的框架是否相交?

2 个答案:

答案 0 :(得分:3)

SpriteKit在其物理子系统中具有相当强大的碰撞检测功能 - 您不必自己动手。

为球和条创建SKPhysicsBody个对象,前者使用init(circleOfRadius:),后者使用init(rectangleOfSize:

然后,您可以:

  1. 自行驱动所有动作,并仅使用SKPhysics来测试碰撞。在这种情况下,您需要将场景的physicsWorld.gravity设置为零向量,并在想要查看它是否正在接触栏时调用球上的allContactedBodies()

  2. SKPhysics通过设定速度或施加冲动来驱动动作。在这种情况下,您需要为物理世界设置一个联系委托,然后每当发生冲突时您都会收到一个回调。

  3. 有关这两种方法的详细信息,请参阅the docs

答案 1 :(得分:0)

检测到球框与框架相交后:

  • 确定球的半径
  • 确定从球的中心到方框边缘的球的边缘线上的点。 (提示:毕达哥拉斯定理 - 斜边=半径)
  • 这一点是否在方块内?
  • 对框中的每个点重复。