0

我正在尝试从 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 中移除重力?你们中的任何人都知道

我会非常感谢你的帮助。

4

2 回答 2

1

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

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

图 1

图 2

图 3

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

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

于 2018-09-30T04:49:11.907 回答
0

?在您希望允许 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 的地方崩溃,那么我们需要重新考虑我们的节点是如何命名的,因为让两个不同的节点具有相同的名称并不是一个好主意。

于 2018-10-01T15:26:34.307 回答