如何让Sprite节点绕另一个节点旋转? (再一行)

时间:2017-04-06 02:59:51

标签: swift swift3 sprite-kit

所以,我试图通过使用SpriteKit和Swift 3重新创建流行的App Store游戏 One More Line 来挑战自我;但是,我立刻遇到了一个大问题。

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

我知道我这一切都错了。任何帮助将非常感谢。谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解你在寻找什么,但如果你只是想让一个精灵围绕一个中心精灵均匀旋转,添加中心精灵,另一个中心精灵(不可见)并添加你的外部精灵到无形的中心精灵。然后旋转你的两个中心精灵。调整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