Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检测圆何时真正与节点相交_Ios_Swift_Sprite Kit - Fatal编程技术网

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,即使从视觉上看,球甚至没有碰到杆


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

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

  • 确定球的半径
  • 确定从球中心到长方体边缘的球边缘线上的点。(提示:勾股定理-斜边=半径)
  • 这一点在长方体的矩形内吗
  • 对框中的每个点重复此操作

SpriteKit在其物理子系统中具有相当强大的碰撞检测功能,您无需自行启动

为球和杆创建
SKPhysicsBody
对象,用于前者和后者

然后,您可以:

  • 自己驾驶所有动作,并仅使用
    SKPhysics
    测试碰撞。在这种情况下,您需要将场景的
    physicsWorld.gravity
    设置为零向量,并在您想查看球是否接触到杆时调用球

  • SKPhysics
    通过设定速度或施加脉冲来驱动运动。在这种情况下,您需要为物理世界设置一个联系人代理,然后每当发生碰撞时,您将收到一个回调


  • 有关这两种方法的详细信息,请参阅。

    谢谢。我使用了方法1。在球和杆上添加一个物理实体不仅解决了这个问题,而且还添加了一个很酷的效果,当球击中杆时,会稍微推动杆。是的,如果你不喜欢这个效果或者想调整它,你可以调整任何一个实体的属性。哦,当然可以。我需要用内置的物理工具做很多实验,看看我能做些什么。