我使用ball.frame.intersects(bar.frame)
,其中ball = SKShapeNode(circleOfRadius: BALL_RADIUS)
和bar = SKShapeNode(rectOfSize: <Some CGSize object>)
虽然这是有效的,但是有一个看不见的方形圆圈。圆的直径与正方形的边相同。这个正方形是ball.frame
的正方形,所以有时候,球的行为就像它与酒吧相交,但在视觉上它不是。
在此屏幕截图中,您可以看到球被停止,因此游戏结束,因为ball.frame.intersects(bar.frame)
返回true,即使视觉上球还没有碰到酒吧。
那么如何检查球是否真正与球杆相交,而不是球的框架是否相交?
答案 0 :(得分:3)
SpriteKit在其物理子系统中具有相当强大的碰撞检测功能 - 您不必自己动手。
为球和条创建SKPhysicsBody
个对象,前者使用init(circleOfRadius:)
,后者使用init(rectangleOfSize:
。
然后,您可以:
自行驱动所有动作,并仅使用SKPhysics
来测试碰撞。在这种情况下,您需要将场景的physicsWorld.gravity
设置为零向量,并在想要查看它是否正在接触栏时调用球上的allContactedBodies()
。
让SKPhysics
通过设定速度或施加冲动来驱动动作。在这种情况下,您需要为物理世界设置一个联系委托,然后每当发生冲突时您都会收到一个回调。
有关这两种方法的详细信息,请参阅the docs。
答案 1 :(得分:0)
检测到球框与框架相交后: