为什么向节点添加 SKPhysicsBody 会随机改变其 zRotation?

问题描述 投票:0回答:0

在有和没有物理体的情况下旋转

SKSpriteNode
会产生不同的
zRotation
值,即使没有其他任何改变。

举个例子:

// I did this in my didMove(to:) function and kept a reference to it 
let node = SKSpriteNode(color: .green, size: CGSizeMake(50, 50))

// Inside a button or gesture action     
print(node.zRotation)
node.run(.rotate(toAngle: .pi * 3/2, duration: 1, shortestUnitArc: true))

// I did this in my didMove(to:) function and kept a reference to it 
let node = SKSpriteNode(color: .green, size: CGSizeMake(50, 50))
node.physicsBody = SKPhysicsBody(edgeLoopFrom: head.frame)

// Inside a button or gesture action
print(node.zRotation)
node.run(.rotate(toAngle: .pi * 3/2, duration: 1, shortestUnitArc: true))

因为我将两者都旋转到 270º,所以我希望两者具有相同的 zRotation 值。但是,在具有物理体的代码中,当您尝试再次运行该代码时,zRotation 值变为 -90º

(-.pi / 2)
。如果您检查完成处理程序中的值,它是正确的 270º,当您尝试再次调用该代码时就会出现问题(我将它连接到滑动手势并在我的视图控制器中保留对节点的引用。在我的开始第二次滑动 zRotation 错误地说
-.pi / 2
)。这个问题不存在于没有将物理体附加到节点的代码片段中。在对 rotate 函数的两次调用中,它都正确打印了
.pi * 3/2
.

的 zRotation

我尝试将物理体更改为基于体积的体,但这对问题没有影响。

为什么会这样,我怎样才能保持行为一致?

ios swift sprite-kit skphysicsbody skaction
© www.soinside.com 2019 - 2024. All rights reserved.