Swift:即使将动态设置为 false, Sprite 节点在碰撞期间仍然是动态的?

标签 swift sprite-kit

好吧,所以我的 sprite 节点 savior 需要是静态的,这样当它与我的其他节点 chicken1 碰撞时,它就不会上下翻转或翻转到其上边。它需要保持正面朝上。

我在这里设置了savior:

var saviorTexture = SKTexture(imageNamed: "1.png")
        saviorTexture.filteringMode = SKTextureFilteringMode.Nearest

        savior = SKSpriteNode(texture: saviorTexture)
        savior.setScale(0.2)
        savior.position = CGPoint(x: self.frame.size.width * 0.5, y: self.frame.size.height * 0.2)
//Savior physics

    savior.physicsBody?.allowsRotation = false
    savior.physicsBody?.dynamic = false
    savior.physicsBody?.affectedByGravity = false
    savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))

    savior.physicsBody?.categoryBitMask = ColliderType.Savior.toRaw()
    savior.physicsBody?.contactTestBitMask = ColliderType.Chicken1.toRaw()
    savior.physicsBody?.collisionBitMask = ColliderType.Chicken1.toRaw()


    self.addChild(savior)

如您所见,我将 allowsRotation 设置为 false,将 dynamic 设置为 false,但仍然允许旋转并且节点仍然是动态的。

此外,当我打开查看物理体时,我的另外 2 个静态节点具有绿色物理体,而 savior 具有深蓝色物理体,这让我相信绿色代表静态,蓝色代表静态。为动态。这使得 savior 绝对是动态的。

我做错了什么?

最佳答案

在实际声明物理体属性之前,您正在设置物理体属性。首先像您已经做的那样声明它

savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))

然后设置所有属性。

关于Swift:即使将动态设置为 false, Sprite 节点在碰撞期间仍然是动态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594918/

相关文章:

ios - 如何比较 Swift 中的 Obj C 枚举?

xcode - 为什么 SKNode 在 SpriteKit 游戏中对触摸没有反应?

ios - `CACurrentMediaTime()` 的替代方案,用于在 SpriteKit 中安排事件

ios - Sprite Kit - 应用 Impulse 向角色发射炮弹

swift - SpriteKit - 无法登录 Gamecenter

swift - 处理场景大小

ios - 重写 ManageObjectContext - 数据消失

ios - iOS 共享扩展中的 API 请求立即失败

iOS项目的Swift Building IP 4地址类

ios - 使用不同类型覆盖属性