在SpriteKit中“吃东西”的最佳方式
“吃”我的意思是:当精灵A(马里奥)与精灵B(一枚硬币)碰撞时,碰撞被检测到并且硬币从场景中移除;然而,马里奥的运动并没有因与硬币的碰撞而改变。在SpriteKit中“吃东西”的最佳方式
目前我使用SKPhysicsContactDelegate
注册时,马里奥和硬币相撞,但这似乎要求承认硬币是一个身体 - 这意味着马里奥的运动被它阻止。
如果硬币没有一个物理体,而应该使用不同的方法来查看它们是否接触?
根据Apple ...
VAR categoryBitMask:UInt32的定义此 物理体属于哪个类别的掩模。
var collisionBitMask:UInt32一个掩码,用于定义物理实体可以与该物理主体碰撞的类别。
var contactTestBitMask:UInt32一个掩码,用于定义哪些类别的 正文会与此物理主体产生交集通知。
所以,如果你只是设置的“马里奥”的contactTestBitMask到硬币categoryBitMask,并在“马里奥”设置collisionBitMask为0(或不硬币categoryBitMask),你应该得到能够告诉2时碰撞在didBegin(_ contact: SKPhysicsContact)
FUNC但硬币不会妨碍马里奥的移动
非常感谢! – modalmusic
设置马里奥和硬币之间的联系没有建立碰撞
但是,如果你想要的硬币弹起离开时,马里奥击中它,没有马里o的运动受到影响,除了Mario和硬币之间有接触之外,您还可以在Mario和硬币之间设置硬币和Mario 但不是之间的碰撞。
如果你这样做,当马里奥击中硬币时,马里奥的动作将不受影响,但硬币将通过物理模拟反弹离开马里奥。
通过设置马里奥的collisionBitMask
不包括硬币的categoryBitMask
,但有硬币collisionBitMask
包括马里奥的categoryBitMask
做到这一点。
注意,这个“单向”碰撞设置不工作联系人,即如果马里奥建立联系与马里奥的contactTestBitMask
包括硬币的种类的硬币,那么它是不相关的,如果硬币的contactTestBitMask
包括的马里奥的类别或不)
就SpriteKit而言,您描述的是接触而非碰撞。 –