gpt4 book ai didi

ios - 遵循相反的路径

转载 作者:行者123 更新时间:2023-11-29 12:08:22 25 4
gpt4 key购买 nike

我正在制作一个围绕一个点运行的 Sprite ,为此我制作了一条由该 Sprite 跟随的路径:

    let dx1 = base1!.position.x - self.frame.width/2
let dy1 = base1!.position.y - self.frame.height/2

let rad1 = atan2(dy1, dx1)

path1 = UIBezierPath(arcCenter: circle!.position, radius: (circle?.position.y)! - 191.39840698242188, startAngle: rad1, endAngle: rad1 + CGFloat(M_PI * 4), clockwise: true)
let follow1 = SKAction.followPath(path1.CGPath, asOffset: false, orientToPath: true, speed: 200)
base1?.runAction(SKAction.repeatActionForever(follow1))

这行得通, Sprite 开始围绕该点运行。问题是,当用户触摸屏幕时,我希望该 Sprite 开始逆时针旋转。为此,我编写了相同的顺时针旋转代码,但将最后一行编辑为:

base1?.runAction(SKAction.repeatActionForever(follow1).reversedAction())

但问题是虽然逆时针旋转,但是sprite图像水平翻转了。我该怎么做才能避免这种情况?或者有没有其他方法可以让 Sprite 通过一个点绕轨道运行?

最佳答案

围绕一个点(即轨道)旋转 Sprite 的一种直接方法是创建一个容器节点,将一个 Sprite 添加到节点的偏移量(相对于容器的中心),然后旋转容器节点。以下是如何执行此操作的示例:

class GameScene: SKScene {
let sprite = SKSpriteNode(imageNamed:"Spaceship")
let node = SKNode()

override func didMove(to view: SKView) {
sprite.xScale = 0.125
sprite.yScale = 0.125
sprite.position = CGPoint (x:100, y:0)

node.addChild(sprite)
addChild(node)

let action = SKAction.rotate(byAngle:CGFloat.pi, duration:5)

node.run(SKAction.repeatForever(action), withKey:"orbit")
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let action = node.action(forKey: "orbit") {
// Reverse the rotation direction
node.removeAction(forKey:"orbit")
node.run(SKAction.repeatForever(action.reversed()),withKey:"orbit")
// Flip the sprite vertically
sprite.yScale = -sprite.yScale
}
}
}

关于ios - 遵循相反的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34243964/

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