作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个球。我不想让他们互相碰撞。我希望它们与其他一切发生碰撞。我使这两个球具有不同的类别位掩码 2 和 3。所有其他对象具有相同的类别位掩码 1。我尝试将两个球的碰撞位掩码设置为 1。我还读过一些内容,说对碰撞位掩码和类别位掩码进行操作,如果它非零,则存在碰撞,因此我使球将碰撞位掩码作为另一个球的类别位掩码。所以它们将为 0,而其他一切都将非零并发生碰撞。这些都不起作用,那么我如何实际制作它们,使其按照我想要的方式工作。
这些是我尝试过的一些面膜
最佳答案
用代码来做,这样更容易阅读。
class GameScene: SKScene, SKPhysicsContactDelegate {
weak var ball1: SKSpriteNode?
weak var ball2: SKSpriteNode?
let noCategory:UInt32 = 0
let ball1Category:UInt32 = 0b1
let ball2Category:UInt32 = 0b1 << 1
let wall1Category:UInt32 = 0b1 << 2
override func didMove(to view: SKView) {
self.physicsWorld.contactDelegate = self
ball1 = self.childNode(withName: "ball1") as? SKSpriteNode
ball2 = self.childNode(withName: "ball2") as? SKSpriteNode
wall1 = self.childNode(withName: "wall1") as? SKSpriteNode
ball1?.physicsBody?.categoryBitMask = ball1Category
ball1?.physicsBody?.collisionBitMask = noCategory
ball2?.physicsBody?.categoryBitMask = ball2Category
ball2?.physicsBody?.collisionBitMask = noCategory
wall1?.physicsBody?.categoryBitMask = wall1Category
wall1?.physicsBody?.collisionBitMask = ball1Category | ball2Category
}
}
现在您可以轻松地看到 wall1 与 ball1 和 ball2 发生碰撞,但球本身不会与任何物体发生碰撞。对于碰撞,只有一个物理体需要设置碰撞位掩码。因此,您可以将 ball1 和 ball2 类别添加到所有物理体碰撞位掩码中,除了相对的球以及与这些物理体碰撞但彼此不碰撞的球之外。
关于Swift Spritekit 物理物体在 SKScene 编辑器中执行碰撞位掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48242936/
我是一名优秀的程序员,十分优秀!