我正在尝试从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中除去重力?你们都知道
非常感谢您的帮助。
答案 0 :(得分:1)
(从给定的代码中)您的子画面看起来像是GameScene.sks中的彩色子画面。如果是这样,这很容易解决。
只需从GameScene.sks文件中移除重力:
将物理定义切换为无,或从“重力影响”中删除勾号
如果您试图从代码中的精灵中消除重力,请在错误的情况下纠正我,但我认为您不能。我更喜欢在场景中手动设置物理场,以避免出现此类错误。
答案 1 :(得分:0)
仅当您要允许为空/无时才使用?
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不为零的位置崩溃,那么我们需要重新考虑节点的命名方式,因为让两个不同的节点同名不是一个好主意。