
物理学
|
231
physicsSprite.physicsBody?.contactTestBitMask = myObjectBitMask;
这样,当有物体发生碰撞,就会调用到
didBegin
和
didEnd
方法。
讨论
当我们想让某个对象接收其他对象的碰撞通知时,我们需要让该对象实现
SKPhysicsContactDelegate
协议,然后将场景的
physicsWorld
的
contactDelegate
属性设置为这个对象。
SKPhysicsContactDelegate
协议定义了两个方法:
didBegin(contact:)
方法和
didEnd(contact:)
方
法,这两个方法在两个
contactTestBitMask
属性存在相交(即
对二者的
contactTestBitMask
进行或运算,不为
0
表示这两者可以产生碰撞)的
物体发生相交时被调用。
碰撞检测掩码
contactTestBitMask
用于定义物体的类型。默认情况下,它是
0
,
也就是说这种物体不属于任何碰撞检测的类型。
SKPhysicsContactDelegate
协议的方法带有一个
SKPhysicsContact
对象参数。这
个
SKPhysicsContact
对象包含了一次碰撞的相关信息,例如发生碰撞的物体是哪
个,它们发生碰撞的位置,以及力的大小。
7.12
查找物体
问题
我们想查找某个场景中的某个物体。
解决方案
在物理世界中查找
SKPhysicsBody
对象,可以使用
enumerateBodies(in:,
using:) ...