[英]SpriteKit avoid collision between two nodes
physicsBody
因為:1)如果藍色節點移動,它應該移動;2)它應該與世界其他地方碰撞,但不與藍色形狀碰撞節點和關節設置良好(見左圖),但physicsBody
確實相互交互(右圖):
請注意:為了使關節正確,我必須向紅色形狀(玩家手臂)添加一個子節點(圓圈)。 所以我們在這里總共討論三個節點。
嘗試了一堆東西。 按照Apples 的文檔和這個線程,我了解到這可以通過categoryBitMask
和collisionBitMask
的正確組合來解決。
位掩碼:
struct Category {
static let none: UInt32 = 0
static let all: UInt32 = UInt32.max
static let playerBody: UInt32 = 0b1 // 1
static let playerArm: UInt32 = 0b10 // 2
static let regularObject: UInt32 = 0b100 // 4
}
🔵 藍色形狀:
body.categoryBitMask = Category.playerBody
body.collisionBitMask = Category.all
🔴紅色形狀(以及它的關節子節點):
body.categoryBitMask = Category.playerArm
body.collisionBitMask = Category.none
……但這並沒有解決問題。
現在連續三天掙扎。 我知道這種問題已經被問過很多次了,但沒有一個能引導我走向正確的方向。 真的很感激任何建議!
這是來自 Apple 文檔:collisionBitMask(但對於 Scenekit,也許在 Spritekit 中是相同的)
這個鍵的值是一個包含 NSUInteger 值的 NSNumber 對象。 SceneKit 僅測試其 categoryBitMask 屬性與此位掩碼重疊的物理體的接觸。 默認值為 all ,指定搜索應測試所有物理體,而不管其類別如何。
所以你不應該使用 Category.all
事實證明,我為紅色形狀打開了錯誤的physicsBody
,因此代碼更改影響了錯誤的節點 🤦
它現在基本上按照我在原始問題中描述的方式工作。
但是——如果你和我一樣剛接觸這個話題:我能找到的最好的解釋就是這個(尤其是“問問你自己”部分)。 祝大家編碼愉快!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.