SKSpriteNode 的循环位置
looping position for SKSpriteNode
我认为我对 while 循环有相当深刻的理解。我希望 left_spinner 从右侧的屏幕外移动到左侧的屏幕外。
然后在右侧移回屏幕外,在左侧移回屏幕外。代码方面我没有看到问题。
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)
}
我认为我对 while 循环有相当深刻的理解。我希望 left_spinner 从右侧的屏幕外移动到左侧的屏幕外。
然后在右侧移回屏幕外,在左侧移回屏幕外。代码方面我没有看到问题。
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)
}