【问题标题】:SpriteKit: Removing gravity from SKSpriteNode doesn't workSpriteKit:从 SKSpriteNode 移除重力不起作用
【发布时间】:2018-09-28 19:10:18
【问题描述】:

我正在尝试从 SKSpriteNode 中移除重力,但无法正常工作。这是我的代码:

我添加添加 SKSpriteNode:

let block: SKSpriteNode = self.childNode(withName: "block") as! SKSpriteNode

我通过 Scene.sks 添加重力

我尝试了所有这些方法来消除重力,但都没有奏效:

block.physicsBody?.affectedByGravity = false
block.physicsBody?.isDynamic = false
block.physicsBody?.velocity.dy = 0
block.physicsBody?.categoryBitMask = 0

如何消除 SKSpriteNode 的重力?你们谁都知道

非常感谢您的帮助。

【问题讨论】:

    标签: sprite-kit xcode10 gameplay-kit swift4.2


    【解决方案1】:

    看起来(根据给定的代码)您的精灵是 GameScene.sks 中的彩色精灵。如果是这样,这很容易解决。

    只需从 GameScene.sks 文件中移除重力:

    将物理定义切换为无,或从“受重力影响”中删除勾选

    如果您试图在代码中从精灵中移除重力,如果我错了,请纠正我,但我认为您做不到。我更喜欢在我的场景中手动设置物理,以避免这样的错误。

    【讨论】:

      【解决方案2】:

      仅当您希望允许 null/nil 时才使用 ?

      block.physicsBody!.affectedByGravity = false
      block.physicsBody!.isDynamic = false
      block.physicsBody!.velocity.dy = 0
      block.physicsBody!.categoryBitMask = 0
      

      physicsBody 不存在时,这将崩溃,这是您要检查的内容(或者您可以使用guard 进行适当的检查。)

      如果失败,你就知道你的方块没有物理实体(这意味着你抓错了方块。)

      您现在需要问自己的问题是您的场景中存在许多 block 精灵,因为您的代码的方式是,它只会提取找到的第一个。

      要禁用方块精灵的所有重力,您可以:

      enumerateChildNodes(withName:"block")
      {
          block,finished in
          block.physicsBody!.isDynamic = false
      }
      

      如果我们的代码在physicsBody 不为nil 的地方崩溃,那么我们需要重新考虑节点的命名方式,因为让两个不同的节点具有相同的名称并不是一个好主意。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多