gpt4 book ai didi

Swift Spritekit 物理物体在 SKScene 编辑器中执行碰撞位掩码

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

我有两个球。我不想让他们互相碰撞。我希望它们与其他一切发生碰撞。我使这两个球具有不同的类别位掩码 2 和 3。所有其他对象具有相同的类别位掩码 1。我尝试将两个球的碰撞位掩码设置为 1。我还读过一些内容,说对碰撞位掩码和类别位掩码进行操作,如果它非零,则存在碰撞,因此我使球将碰撞位掩码作为另一个球的类别位掩码。所以它们将为 0,而其他一切都将非零并发生碰撞。这些都不起作用,那么我如何实际制作它们,使其按照我想要的方式工作。

enter image description here

enter image description here

这些是我尝试过的一些面膜

最佳答案

用代码来做,这样更容易阅读。

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/

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