我正在使用Swift
和Spritekit
进行简单的游戏。
我的场景中有4个节点:nodeA1,nodeA2,nodeB1和nodeB2。
所以 nodeA1可以触及nodeA2 而 nodeB1可以触及nodeB2 。
我想要
nodeA2触摸nodeB2没有nodeA1触摸nodeB1和nodeB2和nodeB1 是一样的。
这可能吗?
答案 0 :(得分:1)
是的,无论你是否意味着碰撞或接触,这绝对是可能的
如果你能澄清这一点,我会告诉你如何做到这一点。 (我可以告诉你两者,但这将是额外的代码。)
编辑 - 此处描述了碰撞的代码:
定义唯一类别,确保您的课程为SKPhysicsContactDelegate
,并让自己成为物理联系代表:
//物理类别 let nodeA1Category:UInt32 = 1<< 0 // b' 00001' let nodeA2ategory:UInt32 = 1<< 1 // b' 00010' let nodeB1Category:UInt32 = 1<< 2 // b' 00100' let nodeB2ategory:UInt32 = 1<< 3 // b' 01000'
类GameScene:SKScene,SKPhysicsContactDelegate { physicsWorld.contactDelegate = self
分配类别(通常在didMove(to view:)
:
nodeA1.physicsBody.catgeoryBitMask = nodeA1Category nodeA2.physicsBody.catgeoryBitMask = nodeA2ategory nodeB1.physicsBody.catgeoryBitMask = nodeB1Category nodeB2.physicsBody.catgeoryBitMask = nodeB2ategory
(确保您已为isDynamic
属性设置为true
的每个节点创建了物理实体)
设置碰撞:
nodeA1.physicsBody?.collisionBitMask = nodeA2ategory // A1与A2发生碰撞 nodeA2.physicsBody?.collisionBitMask = nodeA1Category // A2与A1碰撞
nodeB1.physicsBody?.collisionBitMask = nodeB2ategory // B1与B2发生碰撞 nodeB2.physicsBody?.collisionBitMask = nodeB1Category // B2与B1碰撞
nodeA2.physicsBody?.collisionBitMask = nodeB2ategory // A2与B2发生碰撞 nodeB2.physicsBody?.collisionBitMask = nodeA2ategory // B2与A2碰撞
您现在应该获得所需的所有冲突,但没有联系人通知。如果你想要做这些节点碰撞的事情,你必须实现contactTest
位掩码和didBeg(contact:)
方法。