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

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

概述我一直试图制作一个永远运行的SKAction,我可以随时停止.我这样做了: override func didMove(to view: SKView) { run(SKAction.repeatForever ( SKAction.sequence ([ SKAction.run(drawFrame), SKAction. 我一直试图制作一个永远运行的SKAction,我可以随时停止.我这样做了:
overrIDe func dIDMove(to vIEw: SKVIEw) {    run(SKAction.repeatForever (        SKAction.sequence ([            SKAction.run(drawFrame),SKAction.wait(forDuration: 0.01),])),withKey: "frameDrawing"    )}

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

func drawFrame() {    //(code)    if stop {        removeAction(forKey: "frameDrawing")    }}

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

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

编辑:这是我的代码:

var drawingFrame = SKAction()class GameScene: SKScene,SKPhysicsContactDelegate {overrIDe func dIDMove(to vIEw: SKVIEw) {    drawingFrame = SKAction.repeatForever (        SKAction.sequence ([            SKAction.run(drawFrame),SKAction.wait(forDuration: 0.03),]))    run(drawingFrame)}func drawFrame() {   //(code)    if stop {        drawingFrame.speed = 0.0    }}

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

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

var drawingFrame = SKAction()class GameScene: SKScene,]))    run(drawingFrame)}func drawFrame() {    if stop = false {       //(code)    }    if stop {        removeAllActions()    }}

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

我没有确切的解释为什么drawFrame()目前被多次调用(但我会尝试发现:D)……无论如何,试试这段代码:
import SpriteKitclass GameScene: SKScene,SKPhysicsContactDelegate {    var stop = false    overrIDe func dIDMove(to vIEw: SKVIEw) {        run(SKAction.repeatForever (            SKAction.sequence ([                SKAction.run({[uNowned self] in                    if self.stop {                        self.action(forKey: "frameDrawing")?.speed = 0.0                    }else{                        self.drawFrame()                    }                }),SKAction.wait(forDuration:0.03),withKey: "frameDrawing"        )    }    func drawFrame() {        //(code)        print("drawFrame")    }    overrIDe func touchesBegan(_ touches: Set<UItouch>,with event: UIEvent?) {        super.touchesBegan(touches,with: event)        stop = !stop        print(stop ? "stopped": "running")        if !stop {              self.action(forKey: "frameDrawing")?.speed = 1.0        }    }}

使用touchesBegan切换暂停模式.

总结

以上是内存溢出为你收集整理的Swift 3(SpriteKit):停止永久循环的SKAction有一个延迟全部内容,希望文章能够帮你解决Swift 3(SpriteKit):停止永久循环的SKAction有一个延迟所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1042055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存