2017-09-11 47 views
2

「吃」我的意思是:當精靈A(馬里奧)與精靈B(一枚硬幣)碰撞時,碰撞被檢測到並且硬幣從場景中移除;然而,馬里奧的運動並沒有因與硬幣的碰撞而改變。在SpriteKit中「吃東西」的最佳方式

目前我使用SKPhysicsContactDelegate註冊時,馬里奧和硬幣相撞,但這似乎要求承認硬幣是一個身體 - 這意味着馬里奧的運動被它阻止。

如果硬幣沒有一個物理體,而應該使用不同的方法來查看它們是否接觸?

+0

就SpriteKit而言,您描述的是接觸而非碰撞。 –

回答

3

根據Apple ...

VAR categoryBitMask:UInt32的定義此 物理體屬於哪個類別的掩模。

var collisionBitMask:UInt32一個掩碼,用於定義物理實體可以與該物理主體碰撞的類別。

var contactTestBitMask:UInt32一個掩碼,用於定義哪些類別的 正文會與此物理主體產生交集通知。

所以,如果你只是設置的「馬里奧」的contactTestBitMask到硬幣categoryBitMask,並在「馬里奧」設置collisionBitMask爲0(或不硬幣categoryBitMask),你應該得到能夠告訴2時碰撞在didBegin(_ contact: SKPhysicsContact) FUNC但硬幣不會妨礙馬里奧的移動

+0

非常感謝! – modalmusic

2

設置馬里奧和硬幣之間的聯繫沒有建立碰撞

但是,如果你想要的硬幣彈起離開時,馬里奧擊中它,沒有馬裏o的運動受到影響,除了Mario和硬幣之間有接觸之外,您還可以在Mario和硬幣之間設置硬幣和Mario 但不是之間的碰撞。

如果你這樣做,當馬里奧擊中硬幣時,馬里奧的動作將不受影響,但硬幣將通過物理模擬反彈離開馬里奧。

通過設置馬里奧的collisionBitMask不包括硬幣的categoryBitMask,但有硬幣collisionBitMask包括馬里奧的categoryBitMask做到這一點。

注意,這個「單向」碰撞設置不工作聯繫人,即如果馬里奧建立聯繫與馬里奧的contactTestBitMask包括硬幣的種類的硬幣,那麼它是不相關的,如果硬幣的contactTestBitMask包括的馬里奧的類別或不)