SpriteKit:从 SKSpriteNode 移除重力不起作用
SpriteKit: Removing gravity from SKSpriteNode doesn't work
我正在尝试从 SKSpriteNode 移除重力,但没有成功。这是我的代码:
我添加了SKSpriteNode:
let block: SKSpriteNode = self.childNode(withName: "block") as! SKSpriteNode
我通过 Scene.sks
添加重力
我尝试了所有这些方法来消除重力,但 none 的工作:
block.physicsBody?.affectedByGravity = false
block.physicsBody?.isDynamic = false
block.physicsBody?.velocity.dy = 0
block.physicsBody?.categoryBitMask = 0
如何去除 SKSpriteNode 的重力?有谁知道
非常感谢你的帮助。
看起来(从给定的代码来看)您的精灵是 GameScene.sks 中的彩色精灵。如果是这样,这很容易修复。
只需从 GameScene.sks 文件中移除引力:
将物理定义切换为 none,或删除 "Affected By Gravity"
中的勾号
如果您试图在代码中消除精灵的重力,请纠正我,但我认为您做不到。我更喜欢在我的场景中手动设置物理以避免这样的错误。
仅当您想要 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 的地方崩溃,那么我们需要重新考虑我们的节点是如何命名的,因为让 2 个不同的节点具有相同的名称并不是一个好主意。
我正在尝试从 SKSpriteNode 移除重力,但没有成功。这是我的代码:
我添加了SKSpriteNode:
let block: SKSpriteNode = self.childNode(withName: "block") as! SKSpriteNode
我通过 Scene.sks
添加重力我尝试了所有这些方法来消除重力,但 none 的工作:
block.physicsBody?.affectedByGravity = false
block.physicsBody?.isDynamic = false
block.physicsBody?.velocity.dy = 0
block.physicsBody?.categoryBitMask = 0
如何去除 SKSpriteNode 的重力?有谁知道
非常感谢你的帮助。
看起来(从给定的代码来看)您的精灵是 GameScene.sks 中的彩色精灵。如果是这样,这很容易修复。
只需从 GameScene.sks 文件中移除引力:
将物理定义切换为 none,或删除 "Affected By Gravity"
中的勾号如果您试图在代码中消除精灵的重力,请纠正我,但我认为您做不到。我更喜欢在我的场景中手动设置物理以避免这样的错误。
仅当您想要 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 的地方崩溃,那么我们需要重新考虑我们的节点是如何命名的,因为让 2 个不同的节点具有相同的名称并不是一个好主意。