我試圖理解,在一般的方式,如何解決使用atan/atan2和SK的zRotation時發生的翻轉。SpriteKit旋轉混淆
我的雨燕代碼捕獲鼠標按下,然後計算出當前的位置,並使用這個小功能,點擊之間的角度:
func angleBetweenPointOne(PointOne: CGPoint, andPointTwo PointTwo: CGPoint) -> Double {
let xdiff = CDouble(PointTwo.x - PointOne.x)
let ydiff = CDouble(PointTwo.y - PointOne.y)
let rad = atan2(ydiff, xdiff)
return rad - 1.5707963268 // convert from atan's right-pointing zero to CG's up-pointing zero
}
現在我這樣做:
let action = SKAction.rotateToAngle(CGFloat(angle), duration:0.2)
PlayerSprite.runAction(action)
大部分時間它工作正常,精靈乾淨地旋轉到新的角度。這適用於您可能點擊/觸摸的大多數點。但是,如果咔嗒聲與-ve Y軸交叉 - 即咔嗒聲正好在精靈之下,而下一個恰好在上方,則該角度不是小的,而是360減去該角度。所以精靈旋轉很長的路。
我試圖瞭解如何解決這個問題,所以我不會一遍又一遍地犯同樣的錯誤。
'CG的向上指向零「是什麼意思?您正在計算沒有pi/2的兩點之間的正確角度。 – 0x141E
你想實現什麼?將精靈旋轉到觸摸位置? – Stefan
「向上指向零」表示SK的零點旋轉是「向上」。 atan2的零轉動是「正確的」。所以它們偏離了90度,或-1.57 ...拉德。 –