swift - 如何让一个 Sprite 节点围绕另一个节点旋转? (还有一条线)

标签 swift swift3 sprite-kit

因此,我尝试使用 SpriteKit 和 Swift 3 重新创建流行的 App Store 游戏《One More Line》来挑战 self ;然而,我立即遇到了一个大问题。

1)当用户点击时,如何让我的节点围绕另一个节点旋转

2)我希望我的节点在用户释放手指时继续沿其所面对的相同方向移动(希望这是有道理的......)。

有点像这样

enter image description here

在我的 GameScene.sks 中,我创建了一个不断旋转的中心节点和一个玩家。然后我这样做了:

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    player.move(toParent: center)
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    player.move(toParent: self)
}

override func update(_ currentTime: TimeInterval) {
    let dx = 5 * cos(player.zRotation)
    let dy = 5 * sin(player.zRotation)
    player.physicsBody?.applyImpulse(CGVector(dx: dx, dy: dy))

}

玩家向右移动,当我点击它时,它会围绕节点旋转,当我释放时,它会继续向右移动。

enter image description here

我知道我的做法是错误的。任何帮助将非常感激。谢谢!

最佳答案

我不确定我完全理解你在寻找什么,但如果你只是想让一个 Sprite 围绕中心 Sprite 均匀旋转,请添加中心 Sprite ,另一个中心 Sprite (不可见)并将你的外部 Sprite 添加到不可见的中心 Sprite 。然后旋转两个中心 Sprite 。调整outerObject的x位置以使outerObject离中心对象更近或更远。

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    override func didMove(to view: SKView) {

        anchorPoint = CGPoint(x: 0.5, y: 0.5)

        let centerObject = SKSpriteNode(texture: nil, color: UIColor.blue, size: CGSize(width: 20, height: 20))
        addChild(centerObject)

        let invisibleParent = SKSpriteNode()
        addChild(invisibleParent)

        let outerObject = SKSpriteNode(texture: nil, color: UIColor.red, size: CGSize(width: 50, height: 50))
        outerObject.position.x = 100
        invisibleParent.addChild(outerObject)

        centerObject.run(SKAction.repeatForever(SKAction.rotate(byAngle: 1, duration: 1)))
        invisibleParent.run(SKAction.repeatForever(SKAction.rotate(byAngle: -1, duration: 1)))

    }    

}

enter image description here

关于swift - 如何让一个 Sprite 节点围绕另一个节点旋转? (还有一条线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43244912/

相关文章:

ios - 为单个视频添加多个滤镜

swift - 从 swift 2.3 迁移到 swift 3 时出错

ios - 禁用 SpriteKit 中 SKNode 的旋转

swift - touches.anyObject() 不再工作

ios - 如何将 SkLabelNode 中的文本居中

ios - 输入邮政编码开关查看 Controller (如果在 Parse 中找到)(Swift 和 XCode)

ios - 如何使用 DVR session 初始化 Alamofire Manager?

swift - MacOs SwiftUI 文本字段焦点效果颜色变化

arrays - 如何使用另一个类的变量打印一个类的元素?

ios - 如何显示来自另一个不是 UIViewController 的类的警报弹出窗口?