gpt4 book ai didi

swift - SpriteKit 旋转困惑

转载 作者:搜寻专家 更新时间:2023-11-01 06:24:07 24 4
gpt4 key购买 nike

我试图以一般的方式理解如何解决在使用 atan/atan2 和 SK 的 zRotation 时发生的翻转问题。

我的 Swift 代码捕获 mouseDown,然后使用这个小函数计算当前位置和点击之间的角度:

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)

大多数情况下它工作正常, Sprite 干净利落地旋转到新的角度。这适用于您可能点击/触摸的大多数点。但是,如果点击穿过 -ve Y 轴 - 即点击刚好在 Sprite 下方,而下一个刚好在 Sprite 上方,则角度不是小角度,而是 360 减去角度。所以 Sprite 旋转了很长一段路。

我正在努力了解如何解决这个问题,这样我就不会一遍又一遍地犯同样的错误。

最佳答案

替换行

let action = SKAction.rotateToAngle(CGFloat(angle), duration:0.2)

let action = SKAction.rotateToAngle(CGFloat(angle), duration:0.2, shortestUnitArc:true)

发生的事情是,当点击穿过负 X 轴时,从 atan2() 返回的角度从“接近 π”变为“接近 ”,反之亦然。您已将其偏移四分之一圈,因此它显示在负 Y 轴上。 π 都会产生相同的 Sprite 旋转,但是当 Action 计算它们之间的转换时,它会看到 的差异, 并适当插入中间点。

shortestUnitArc 参数允许您检查另一条路是否更短,如果是,则旋转那条路。

关于swift - SpriteKit 旋转困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26948690/

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