Ios 检测圆何时真正与节点相交
我使用Ios 检测圆何时真正与节点相交,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我使用ball.frame.intersects(bar.frame),其中ball=SKShapeNode(圆形半径:ball\u半径)和bar=SKShapeNode(矩形尺寸:) 虽然这样做有效,但有一个不可见的正方形,圆圈就刻在其中。圆的直径与正方形的边相同。这个正方形就是球的框架,所以有时候球会表现得像是与横杆相交,但从视觉上看它不是 在此屏幕截图中,您可以看到球已停止,因此游戏结束,因为ball.frame.intersects(bar.frame)返回了true,即使从视觉上看,
ball.frame.intersects(bar.frame)
,其中ball=SKShapeNode(圆形半径:ball\u半径)
和bar=SKShapeNode(矩形尺寸:)
虽然这样做有效,但有一个不可见的正方形,圆圈就刻在其中。圆的直径与正方形的边相同。这个正方形就是球的框架,所以有时候球会表现得像是与横杆相交,但从视觉上看它不是
在此屏幕截图中,您可以看到球已停止,因此游戏结束,因为ball.frame.intersects(bar.frame)
返回了true,即使从视觉上看,球甚至没有碰到杆
那么,如何检查球是否真的与杆相交,而不是球的框架是否相交?在检测到球框架与框框架相交后:
- 确定球的半径
- 确定从球中心到长方体边缘的球边缘线上的点。(提示:勾股定理-斜边=半径)
- 这一点在长方体的矩形内吗
- 对框中的每个点重复此操作
SKPhysicsBody
对象,用于前者和后者
然后,您可以:
SKPhysics
测试碰撞。在这种情况下,您需要将场景的physicsWorld.gravity
设置为零向量,并在您想查看球是否接触到杆时调用球SKPhysics
通过设定速度或施加脉冲来驱动运动。在这种情况下,您需要为物理世界设置一个联系人代理,然后每当发生碰撞时,您将收到一个回调有关这两种方法的详细信息,请参阅。谢谢。我使用了方法1。在球和杆上添加一个物理实体不仅解决了这个问题,而且还添加了一个很酷的效果,当球击中杆时,会稍微推动杆。是的,如果你不喜欢这个效果或者想调整它,你可以调整任何一个实体的属性。哦,当然可以。我需要用内置的物理工具做很多实验,看看我能做些什么。