尝试通过按下按钮将 sprite 的 zRotation 增加 1 度时旋转不正确
getting incorrect rotation when trying to increment a sprite's zRotation by 1 degree with button press
我有一个简单的矩形精灵,我想在每次按下屏幕上的按钮时将该精灵旋转 1 度。我有一些我希望可以工作的简单代码,但它给出了奇怪的结果。不是将矩形旋转 1 度,而是每次点击至少将其旋转 180-270 度。
var degrees = 0
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
let touchLocation = touch!.location(in: self)
let beam = childNode(withName: "beam") as! SKSpriteNode
if let body = physicsWorld.body(at: touchLocation) {
if body.node!.name == "leftTap" {
print("Began touch on Left")
beam.zRotation = CGFloat(degrees)
degrees = degrees + 1
}else{
print("Began touch on right")
}
}
}
在 GameScene.sks 精灵属性检查器中,您可以通过按“+”或“-”按钮来增加旋转。我想这会以同样的方式工作,但我一定不了解这里的轮换原则。
如有任何建议,我们将不胜感激。
不是度数,是弧度。 3 左右的值 (pi) 是一个完整的自旋。
https://developer.apple.com/documentation/spritekit/sknode/1483089-zrotation
这是您可以使用的便捷扩展:
extension SKNode {
// Usage is node.rotateBy(45) etc:
func rotateBy(_ degree: CGFloat) {
let conversionFactor = CGFloat(0.01745329252)
self.run(.rotate(byAngle: degree * conversionFactor, duration: 0))
}
}
我有一个简单的矩形精灵,我想在每次按下屏幕上的按钮时将该精灵旋转 1 度。我有一些我希望可以工作的简单代码,但它给出了奇怪的结果。不是将矩形旋转 1 度,而是每次点击至少将其旋转 180-270 度。
var degrees = 0
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
let touchLocation = touch!.location(in: self)
let beam = childNode(withName: "beam") as! SKSpriteNode
if let body = physicsWorld.body(at: touchLocation) {
if body.node!.name == "leftTap" {
print("Began touch on Left")
beam.zRotation = CGFloat(degrees)
degrees = degrees + 1
}else{
print("Began touch on right")
}
}
}
在 GameScene.sks 精灵属性检查器中,您可以通过按“+”或“-”按钮来增加旋转。我想这会以同样的方式工作,但我一定不了解这里的轮换原则。
如有任何建议,我们将不胜感激。
不是度数,是弧度。 3 左右的值 (pi) 是一个完整的自旋。
https://developer.apple.com/documentation/spritekit/sknode/1483089-zrotation
这是您可以使用的便捷扩展:
extension SKNode {
// Usage is node.rotateBy(45) etc:
func rotateBy(_ degree: CGFloat) {
let conversionFactor = CGFloat(0.01745329252)
self.run(.rotate(byAngle: degree * conversionFactor, duration: 0))
}
}