Swift SKSpriteNode的循环位置

Swift SKSpriteNode的循环位置,swift,while-loop,sprite-kit,skspritenode,skaction,Swift,While Loop,Sprite Kit,Skspritenode,Skaction,我想我对while循环有一个相当坚定的理解。我希望左_微调器从右侧的屏幕外移动到左侧的屏幕外 然后在右侧移回屏幕外,在左侧移回屏幕外。代码方面,我看不出问题所在 import SpriteKit import GameplayKit class GameScene: SKScene { var left_spinner = SKSpriteNode() override func didMove(to view: SKView) { left_spinne

我想我对while循环有一个相当坚定的理解。我希望左_微调器从右侧的屏幕外移动到左侧的屏幕外

然后在右侧移回屏幕外,在左侧移回屏幕外。代码方面,我看不出问题所在

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    var left_spinner = SKSpriteNode()

    override func didMove(to view: SKView) {

        left_spinner = self.childNode(withName: "left_spinner") as! SKSpriteNode
        left_spinner.position = CGPoint(x: 675, y: 0)

        left_spinner.run(SKAction.move(to: CGPoint(x: -675, y: 0), duration: 3.0))

        goalLoop()
    }

    func goalLoop(){
        left_spinner.run(SKAction.move(to: CGPoint(x: -675, y: 0), duration: 3.0))

        while (left_spinner.position == CGPoint(x: -675, y: 0)){
            left_spinner.run(SKAction.move(to: CGPoint(x: 675, y: 0), duration: 0.0))
            left_spinner.run(SKAction.move(to: CGPoint(x: -675, y: 0), duration: 3.0))
        }
    }

    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
    }

}

这里您不需要任何同步循环,SKAction API为您提供了排序操作的方法。只需将整个代码替换为:

override func didMove(to view: SKView) {

    left_spinner = self.childNode(withName: "left_spinner") as! SKSpriteNode
    left_spinner.position = CGPoint(x: 675, y: 0)

    // Prepare base actions
    let moveLeftAction = SKAction.move(to: CGPoint(x: -675, y: 0), duration: 3.0)
    let moveRightAction = SKAction.move(to: CGPoint(x: 675, y: 0), duration: 3.0)

    // Prepare sequencing
    let loopCount = 10
    let leftRightAction = SKAction.sequence([moveLeftAction, moveRightAction])
    let pingPongAction = SKAction.repeat(leftRightAction, count: loopCount)

    // Run final action
    left_spinner.run(pingPongAction)
}