Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Swift 3(SpriteKit):停止永久循环的SKAction有一个延迟大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我一直试图制作一个永远运行的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 SpriteKit

class 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有一个延迟所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。