我正在使用一个简单的游戏Swift
和Spritekit
。
我的场景中有4个节点:nodeA1、nodeA2、nodeB1和nodeB2。
所以nodeA1可以触摸nodeA2,nodeB1可以触摸nodeB2。
我想要
nodeA2触摸nodeB2不带nodeA1触摸nodeB1和nodeB2和nodeB1
是一样的。
有可能吗?
最佳答案
是的,这是绝对可能的,不管你是指碰撞还是接触
如果你能澄清这一点,我就告诉你怎么做。(我可以告诉你这两个,但那将是额外的代码。)
编辑-按说明在此处编写冲突代码:
定义独特的类别,确保您的班级是一个SKPhysicsContactDelegate
并使自己成为物理联系人代表:
//物理范畴
设nodea1类别:UInt32=1<设nodea2类别:UInt32=1<设nodeb1类别:UInt32=1<设nodeb2类别:UInt32=1<类游戏场景:SKScene,skphysiccontactdelegate{
physicsWorld.contactDelegate=自己
分配类别(通常在didMove(to view:)
中:
nodeA1.physicsBody.catgeoryBitMask=nodeA1类别
nodeA2.physicsBody.catgeoryBitMask=nodeA2类别
nodeB1.physicsBody.catgeoryBitMask=nodeB1类别
nodeB2.physicsBody.catgeoryBitMask=nodeB2类别
(确保为每个节点创建了物理实体,并将isDynamic
属性设置为true
)
设置碰撞:
物理身体?.collisionBitMask=nodeA2Category//A1与A2冲突
物理身体?.collisionBitMask=nodeA1Category//A2与A1冲突
物理身体?.collisionBitMask=nodeB2Category//B1与B2冲突
物理身体?.collisionBitMask=nodeB1Category//B2与B1冲突
物理身体?.collisionBitMask=nodeB2Category//A2与B2冲突
物理身体?.collisionBitMask=nodeA2Category//B2与A2冲突
现在,您应该可以获得所需的所有冲突,但没有联系人通知。如果要执行这些节点冲突的操作,则必须实现contactTest
位掩码以及didBeg(contact:)
方法。