大佬教程收集整理的这篇文章主要介绍了ios – 什么是Sprite Kit的“类别掩码”和“碰撞掩码”?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Sprite-Kit游戏引擎自动处理冲突;联系人由您的代码处理 – 当您感兴趣的联系人发生时,您的代码(对于Swift 2的didBeginContact’,对于Swift 3及更高版本的’didBegin(contact :))被调用.
您需要以二进制的方式考虑这些,为简单起见,我们将从简单的类别位掩码开始,即场景中的每个对象只属于一个类别.
例如.在你的场景中你有一个玩家,一个玩家导弹,一个敌人和一个屏幕边缘.我们假设位掩码是8位而不是32位.将每个数字视为8个二进制数字(8位)的范围,每个数字为0或1.
场景中的对象必须具有唯一的类别,因此我们将按如下方式分配它们:
player.categoryBitMask = 00000001 (1 in decimal) playerMissile.categoryBitMask = 00000010 (2 in decimal) enemy.categoryBitMask = 00000100 (4 in decimal) screenEdge.categoryBitMask = 00001000 (8 in decimal)
如果你使用十进制数字,而不是2的幂(1,2,4,8,16,32,64,128等),那么在类别位掩码中将设置多于1位,这使得复杂化事物(这意味着这个对象属于多个类别),你的代码必须变得更复杂.
现在想想从什么(碰撞)反弹的东西.让我们说除了导弹穿过屏幕边缘之外,其他一切都会反弹.
每个对象的冲突位掩码由表示该对象与之冲突的对象的位组成,即:
player.collsionBitMask = 00001111 (15 in decimal) (the bits for all other objects are set) playerMissile.collisionBitMask = 00000111 (7) (all object EXCEPT screenEdgE) enemy.collisonBitMask = 00001111 (15) (everything) screenEdge.collisonBitMask = 00000000 (0) (collides with nothing)
现在我们考虑一下我们感兴趣的对象交互.我们想知道何时:
>玩家和敌人的触碰
>敌人和玩家触摸或敌人和玩家的导弹接触.
这表示为:
player.contactTESTBitMask = 00000100 (4) (the enemy's categoryBitMask) enemy.contractTESTBitMask = 00000011 (3) (the player's categoryBitMask combined with the missile's categoryBitMask))
注意,如果你想知道A和B何时触摸,只需让A的contactTESTBitMask(CTBM)包含B的categoryBitMask;你也不必将B的CTBM设置为A的类别.但是如果你希望它们互相反弹,那么每个对象的collisionBitMask必须包含另一个的categoryBitMask.如果A的collisonbitMask包含B的类别,但反之亦然,那么当2碰撞时,A将反弹但B将不受其影响.
对于您的具体示例,(类别掩码为32,冲突掩码为11),categoryBitMask为32,即00100000(仅粘贴8位). collisionBitMask是11,这是8 4 1所以在二进制中这是’00001101′,这意味着它与categoryBitMask为8,4或1的对象发生碰撞,所以我假设你的场景中有这些categoryBitMasks的对象.
默认情况下,所有其他内容都会反弹,即collisionBitMask全部为’1′,即b’111111 ..’,并且没有任何其他内容通知联系人,即contactTESTBitMask全部为0.
此外 – 所有这些都适用于physicsBodies,而不是节点.
以上是大佬教程为你收集整理的ios – 什么是Sprite Kit的“类别掩码”和“碰撞掩码”?全部内容,希望文章能够帮你解决ios – 什么是Sprite Kit的“类别掩码”和“碰撞掩码”?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。