我正在寻找在我的spriteKit游戏中为我的英雄收集物品的最好方法,并且在尝试了几种方法之后,我的结论是最好的方法是有物理身体的物品可以检测到碰撞,但不会与我的英雄发生碰撞 . 有可能吗?停用物理机构的碰撞而不停用其检测碰撞的能力?听起来有点矛盾我知道......因为,另一种方式是只创建一个没有物理体的SKSpriteNode,那么就不会发生碰撞,但是“检测”碰撞的方法将是手工制作的,而且更加困难,因为我需要在我的英雄中设置坐标系检测,当他将在那些细节坐标(在项目上)时,我将使项目消失 . 如何更轻松地了解如何做到这两种方式中的任何一种?
4 回答
contactTestBitMask
用于触发didBeginContact
.collisionBitMask
用于激活节点上的物理 .你可以通过设置播放器的categoryBitMask和contactBitMasks以及项目对象来做到这一点,但要确保你没有设置collisionBitMask来互相交互(见下文)
通过这种方式,物理体将拾取玩家与世界物体,物品和世界物体之间的碰撞,但不会在玩家和物品之间发生碰撞 . 它将触发对didBeginContact的调用,您可以在其中删除项目节点,添加运行状况等 .
希望这可以帮助!
简短回答:
collisionBitMask
的默认值是0xFFFFFFFF(所有位都设置),这就是节点与其他节点冲突的原因查看
SKPhysicsBody
类中的collisionBitMask,categoryBitMask和contactTestBitMask .基本上,具有相同
collisionBitMask
值的物理实体将彼此相互配合 .然后,设置
categoryBitMask
和contactTestBitMask
值以在联系人上创建SKPhysicsContact
对象 . 最后,您的类应采用SKPhysicsContactDelegate
协议 . 使用- didBeginContact:
方法检测和处理SKPhysicsContact
对象 .