【问题标题】:Xcode affectedByGravity value resets to true and will not stay set to falseXcode affectedByGravity 值重置为 true 并且不会保持设置为 false
【发布时间】:2018-03-02 18:10:11
【问题描述】:

我对 Xcode Games 还很陌生,但我一直在尝试使用引力场。我能够创建字段,使身体与它们交互等,但是,当我以编程方式创建 SKSpriteNode 时,第二次我给它一个物理身体,无论我将 AffectedByGravity 或 fieldBitMask 值设置为什么,它总是被吸引到场景中的径向场。

这是我认为相关的代码:

 func createNewBody(x: CGFloat, y: CGFloat){
    let newBody = SKSpriteNode()
    newBody.texture = SKTexture(image: #imageLiteral(resourceName: "Circle_Burgundy_Solid.svg"))
    newBody.size = CGSize(width: 10, height: 10)
    newBody.position.x = x
    newBody.position.y = y
    newBody.physicsBody = SKPhysicsBody(circleOfRadius: newBody.size.width/2)
    newBody.physicsBody?.affectedByGravity = false
    self.addChild(newBody)
}

这段代码是从touchBegan方法调用的:

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches{
        if touch == touches.first{
            createNewBody(x: touch.location(in: self).x, y: touch.location(in: self).y)
        }
    }
}

我不知道为什么这不起作用。任何想法都会很棒!谢谢!

【问题讨论】:

  • 我尝试在 update() 方法中打印 newBody.physicsBody?.affectedByGravity 的值,它返回 optional(true) 无论我在何时何地将其设置为 false,即使在 update()方法。
  • 所以你的方法中的 newBody 是他们接触到的位置的新精灵,对吧?可能有一大堆,对吧?您在更新方法中打印出哪个 newBody ?是否有一个全局 newBody 存储在不同的地方?

标签: swift xcode sprite-kit field gravity


【解决方案1】:

在您的代码中,您使用了局部变量 newBody,您确定该节点在 update 中可用吗?

affectedByGravity 旨在定义与物理世界的引力相互作用,与任何其他领域无关。

如果要定义给定节点相对于字段的行为,则需要相应地设置节点的fieldBitMask 和字段的categoryBitMask

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 2015-11-27
    • 2023-03-21
    • 2014-11-05
    • 2020-11-14
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多