gpt4 book ai didi

ios - 这是为我的旋转节点制作 if 语句的正确方法吗?

转载 作者:行者123 更新时间:2023-11-28 11:06:50 24 4
gpt4 key购买 nike

我可以用一根手指旋转我的节点,但是我的 if 语句有问题。如果我向左或向右旋转,我有一个 if 语句来添加一个 Action 。当我向右旋转时,我打印到控制台 print("rotate right") ,当我旋转到时打印到控制台 print("rotate left")左边。我遇到的问题是,当我向右旋转时,有一个旋转点打印出“向左旋转”,而在同一点上,当我向左旋转时,同样的事情发生了,它打印出“向右旋转”。为什么会这样?

编辑这里是现场的图片。

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {

for touch in touches {
var previousAngle: CGFloat = 0.0
let location = touch.locationInNode(self)
let node = self.nodeAtPoint(location)

if node.name == "circle" {
if lastNodeSelected != nil {
let touchedNode = lastNodeSelected!

//lets user rotate with one finger.
let dy = touchedNode.position.y - location.y
let dx = touchedNode.position.x - location.x
let angle2 = atan2(dy, dx)
touchedNode.zRotation = angle2

let delta = (angle2 - previousAngle)
if delta > 0 {
print("rotate left")
}
else {
print("rotate right")
}
previousAngle = angle2
}
}
}
}

最佳答案

atan2 给出了从 -π 到 π 的结果,因此有一个过渡点,值跳跃 2π(或 -2π,具体取决于您前进的方向)。

要在一般情况下进行这项工作,您不能只减去角度;你需要弄清楚 angle2 是否更接近 previousAngle 顺时针或逆时针移动。

尝试:

func rotationDelta(fromAngle a0: Double, toAngle a1: Double) -> Double {
let π = M_PI
return ((a1 - a0) % (2*π) + 3*π) % (2*π) - π
}

……然后:

let delta = rotationDelta(fromAngle: previousAngle, toAngle: angle2)

关于ios - 这是为我的旋转节点制作 if 语句的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37084157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com