【问题标题】:swift spritekit : How to stop a runBlock?swift spritekit:如何停止 runBlock?
【发布时间】:2016-12-07 04:42:24
【问题描述】:

如何停止 runBlock 中的所有操作:

func slideShowControl () {


    let noObject = SKSpriteNode()
    noObject.name = "noObject"

    addChild(noObject)



    let block = SKAction.runBlock({

        self.slideShow(1)
        print("slide01")

        self.runAction(SKAction.waitForDuration(5), completion: {

            print("slide02")


        })

        self.runAction(SKAction.waitForDuration(8), completion: {

            print("slide03")

        })

        ...

        self.runAction(SKAction.waitForDuration(17), completion: {

            print("slide06")

        })

    })


    noObject.runAction(block, withKey: "stop")

self.slideShow(1) 只是显示一个按钮来发送“停止”键,但该块继续运行并打印。可以停止这个块吗?

noObject.removeActionForKey("stop")

【问题讨论】:

标签: swift sprite-kit removeall


【解决方案1】:

所以你命名一个对象“noObject”和一个动作“停止”? :)

无论如何,您应该使用group 和一些sequence 操作。

想法

这段代码

self.runAction(SKAction.waitForDuration(5), completion: {
    print("slide02")
})

也可以这样写

let action1 = SKAction.sequence([SKAction.waitForDuration(5), SKAction.runBlock { print("slide02") }])

解决方案

给定一个精灵

let sprite = SKSpriteNode()

还有 4 个动作

let action0 = SKAction.runBlock { print("slide01") }
let action1 = SKAction.sequence([SKAction.waitForDuration(5), SKAction.runBlock { print("slide02") }])
let action2 = SKAction.sequence([SKAction.waitForDuration(8), SKAction.runBlock { print("slide03") }])
let action3 = SKAction.sequence([SKAction.waitForDuration(6), SKAction.runBlock { print("slide06") }])

我们可以像这样对动作进行分组

let group = SKAction.group([action0, action1, action2, action3])

现在我们可以用一个键来运行这个动作了

sprite.runAction(group, withKey: "group")

然后停下来

sprite.removeActionForKey("group")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    相关资源
    最近更新 更多