gpt4 book ai didi

swift - 如何正确使用Scenekit的类别 mask 、碰撞 mask 和物理体、contactTestBitMask并做出适当的碰撞?

转载 作者:行者123 更新时间:2023-11-30 10:55:20 26 4
gpt4 key购买 nike

我一直在尝试学习scenekit并完成了一本书,但只有碰撞检测部分不明白,也许是最重要的部分。有类别掩码、共谋掩码和物理体?.contactTestBitMask。

我想创建一个简单的游戏来实现这个目标,但我卡住了。我不确定我是否明白这个想法。

在游戏中,有一个球并收集珍珠,并远离岩石和洞。在这种情况下:

类别掩码:

  • 球 = 0b0001
  • 珍珠 = 0b0010
  • 岩石 = 0b0100
  • 孔 = 0b1000

physicalBody?.contactTestBitMask:

  • 球=珍珠|| rock//表示 0b1110
  • 珍珠 = 1
  • 岩石 = 1

共谋掩码为 1,因为它们都会相互碰撞。

我不确定是否遇到此碰撞问题。因此,在开始编写代码之前,我想确定一下。在SCNPhysicsContactDelegate中,下面的函数解决了如何学习彼此接触时的情况:

physicsWorld(_ didBegin contact: _) {

var contactNode:SCNNode!
if contact.nodeA.name == "ball" {
contactNode = contact.nodeB
} else {
contactNode = contact.nodeA
}

if contactNode.physicsBody?.categoryBitMask == 0b0010 {
// mean pearls
// raise score etc
}

if contactNode.physicsBody?.categoryBitMask == 0b0100 || 0b1000{
if contactNode.name == "Rock" { print("You rocked") }
if contactNode.name == "Hole" { print("You need to climb") }
}

}

我搜索了 youtube 和 stack,但只有一种解释。 Stack LinkYouTube 视频没有解释这些。书中的示例受版权保护,因此我不能将它们放在这里。

谢谢你,祝你有美好的一天。

最佳答案

您没有使用按位运算符。 https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html

改变

if contactNode.physicsBody?.categoryBitMask == 0b0100 || 0b1000

if contactNode.physicsBody?.categoryBitMask == 0b0100 | 0b1000

单曲|和 & 是用于此类按位运算的正确运算符。

关于swift - 如何正确使用Scenekit的类别 mask 、碰撞 mask 和物理体、contactTestBitMask并做出适当的碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54028806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com