gpt4 book ai didi

swift - 为什么我需要在转换点后进行调整?

转载 作者:行者123 更新时间:2023-11-28 13:05:22 27 4
gpt4 key购买 nike

我的场景是setup scene > world: sknode > camera: sknode > ship: SKSpriteNode

我想让飞船指向触摸的位置:

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

let touchLocation = touch.locationInNode(self)
let location = cameraNode.convertPoint(touchLocation, toNode: world)


moveCameraNode(CGPointsToVector(location, b: cameraNode.position))

let shipTouchPosition = scene?.convertPoint(touchLocation, fromNode: world)
let shipPosition = scene?.convertPoint(ship.position, fromNode: world)

let angle = atan2(shipTouchPosition!.y - shipPosition!.y, shipTouchPosition!.x - shipPosition!.x)

let magicNumber = CGFloat(M_PI_2)
ship.runAction(SKAction.rotateToAngle(angle - magicNumber, duration: 0.1, shortestUnitArc: true))
}

override func didFinishUpdate() {
centerOnNode(cameraNode)
}

func centerOnNode(node: SKNode) {
let cameraPositionInScene = node.scene?.convertPoint(node.position, fromNode: node.parent!)
node.parent!.position = CGPointsSubtract(node.parent!.position, b: cameraPositionInScene!)
}

所以,它现在工作正常,但我不确定为什么我需要 magicNumber.

编辑:感谢@mundi 发现了我的一个愚蠢错误,这个错误掩盖了我真正的问题,即我在 convertPoint 上做错了什么,我必须在之后调整它。

最佳答案

角度以弧度计算。 360 度是常量 PI 的 2 倍,即 2 * M_PI。在 SpriteKit 中,角度计算从右中(相当于 3 点)开始,对应 90 度或二分之一 PI,M_PI_2

80 读取为弧度计算结果为 1.46018,非常接近 M_PI_21.57079。这就是为什么这个数字似乎“神奇地”解决了这个差异,即使它略有偏差。真正的“神奇”数字是 CGFloat(M_PI_2)

关于swift - 为什么我需要在转换点后进行调整?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981183/

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