Swift 3(SpriteKit):停止永久循环的SKAction有一个延迟

前端之家收集整理的这篇文章主要介绍了Swift 3(SpriteKit):停止永久循环的SKAction有一个延迟前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直试图制作一个永远运行的SKAction,我可以随时停止.我这样做了:
  1. override func didMove(to view: SKView) {
  2.  
  3. run(SKAction.repeatForever (
  4. SKAction.sequence ([
  5. SKAction.run(drawFrame),SKAction.wait(forDuration: 0.01),])),withKey: "frameDrawing"
  6. )
  7. }

然后在drawFrame函数中我像这样停止SKAction:

  1. func drawFrame() {
  2. //(code)
  3. if stop {
  4. removeAction(forKey: "frameDrawing")
  5. }
  6. }

出于某种原因,SKAction仅在停止变为真后运行3或4次后停止.我希望它在stop设置为true时立即停止,而不是在重复3或4次后立即停止.

如果有人知道如何解决这个问题,请告诉我,因为我尝试了很多东西,他们从来没有解决过这个问题.谢谢!

编辑:这是我的代码

  1. var drawingFrame = SKAction()
  2. class GameScene: SKScene,SKPhysicsContactDelegate {
  3.  
  4. override func didMove(to view: SKView) {
  5.  
  6. drawingFrame = SKAction.repeatForever (
  7. SKAction.sequence ([
  8. SKAction.run(drawFrame),SKAction.wait(forDuration: 0.03),]))
  9. run(drawingFrame)
  10. }
  11.  
  12. func drawFrame() {
  13. //(code)
  14. if stop {
  15. drawingFrame.speed = 0.0
  16. }
  17. }

如果您想知道为什么我在开始时将SKAction drawingFrame设置为空SKAction,那是因为我需要在两个函数之前定义SKAction.否则,两个函数都没有定义.

编辑任何有相同问题的人:我已经使用自己的想法和@ appzYourLife的解决方解决了问题.每次都有效的最有效方法是只在stop等于false时才运行代码.但是,请确保停止程序的if语句超出该括号,以便SKAction最终停止.这是工作代码

  1. var drawingFrame = SKAction()
  2. class GameScene: SKScene,]))
  3. run(drawingFrame)
  4. }
  5.  
  6. func drawFrame() {
  7. if stop = false {
  8. //(code)
  9. }
  10. if stop {
  11. removeAllActions()
  12. }
  13. }

如果您愿意,可以对stop = false语句使用if else语句.

我没有确切的解释为什么drawFrame()目前被多次调用(但我会尝试发现:D)……无论如何,试试这段代码
  1. import SpriteKit
  2.  
  3. class GameScene: SKScene,SKPhysicsContactDelegate {
  4.  
  5.  
  6.  
  7. var stop = false
  8.  
  9. override func didMove(to view: SKView) {
  10.  
  11. run(SKAction.repeatForever (
  12. SKAction.sequence ([
  13. SKAction.run({[unowned self] in
  14. if self.stop {
  15. self.action(forKey: "frameDrawing")?.speed = 0.0
  16. }else{
  17. self.drawFrame()
  18. }
  19.  
  20. }),SKAction.wait(forDuration:0.03),withKey: "frameDrawing"
  21. )
  22. }
  23.  
  24. func drawFrame() {
  25. //(code)
  26. print("drawFrame")
  27.  
  28. }
  29. override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) {
  30. super.touchesBegan(touches,with: event)
  31. stop = !stop
  32. print(stop ? "stopped": "running")
  33. if !stop {
  34. self.action(forKey: "frameDrawing")?.speed = 1.0
  35. }
  36. }
  37. }

使用touchesBegan切换暂停模式.

猜你在找的Swift相关文章