【问题标题】:Trouble with SKAction.runBlock running in sequenceSKAction.runBlock 顺序运行出现问题
【发布时间】:2016-02-20 10:17:15
【问题描述】:

我有几个 runBlocks 我需要按顺序运行,但即使使用 SKAction.sequence([action1, action2, action3]) 时它们仍然同时运行。任何帮助将不胜感激。

这是我的代码示例:

func SetupText() {

    let wait = SKAction.waitForDuration(2.0)

    var Label1 = SKLabelNode()
    Label1.fontColor = UIColor.whiteColor()
    Label1.position = CGPointMake(self.size.width / 2.3, self.size.height / 1.4)
    Label1.text = "blah1"
    self.addChild(Label1)
    scrollLabel1 = SKAction.runBlock({
        self.runSomeCode(Label1)
    })

    var Label2 = SKLabelNode()
    Label2.fontColor = UIColor.whiteColor()
    Label2.position = CGPointMake(self.size.width / 2.5, self.size.height * 0.6)
    Label2.text = "blah2"
    self.addChild(Label2)
    scrollLabel2 = SKAction.runBlock({
        self.runSomeCode(Label2)
    })

    var Label3 = SKLabelNode()
    Label3.fontColor = UIColor.whiteColor()
    Label3.position = CGPointMake(self.size.width / 2.5, self.size.height * 0.5)
    Label3.text = "blah3"
    self.addChild(Label3)
    scrollLabel3 = SKAction.runBlock({
        self.runSomeCode(Label3)
    })

    var Label4 = SKLabelNode()
    Label4.fontColor = UIColor.whiteColor()
    Label4.position = CGPointMake(self.size.width / 2.5, self.size.height * 0.4)
    Label4.text = "blah4"
    self.addChild(Label4)
    scrollLabel4 = SKAction.runBlock({
        self.runSomeCode(Label4)
    })

    var Label5 = SKLabelNode()
    Label5.fontSize = 20
    Label5.fontName = "LiquidCrystal-Regular"
    Label5.fontColor = UIColor.whiteColor()
    Label5.position = CGPointMake(self.size.width / 2.5, self.size.height * 0.3)
    Label5.text = "blah5"
    self.addChild(Label5)
    scrollLabel5 = SKAction.runBlock({
        self.runSomeCode(Label5)
    })

    var actions = Array<SKAction>()
    actions.append(wait)
    actions.append(scrollLabel1)
    actions.append(scrollLabel2)
    actions.append(scrollLabel3)
    actions.append(scrollLabel4)
    actions.append(scrollLabel5)
    let sequence = SKAction.sequence(actions)

    self.runAction(sequence)

}

【问题讨论】:

    标签: swift skaction


    【解决方案1】:

    实际上似乎与动作无关,但它与运行块有关。运行块的操作可能比序列花费更长的时间,这意味着您的序列看起来是并发的。使用常规操作而不是操作块需要解决您的问题。

    【讨论】:

    • 我认为常规操作不会完成我的自定义标签动画。有没有办法同步运行这些块?
    • 您可以将 performSelector 用于命名操作,并使用完成处理程序调用下一个操作。
    • 除非我做错了什么,否则会产生相同的结果。我创建了一个名为 scrollText() 的函数来设置操作并在选择器 self.runAction(scrollLabel1, completion: {self.runAction(self.scrollLabel2)}) 的完成处理程序中调用后续操作然后像这样在我的 performSelector 中调用它 performSelector(Selector(self.scrollText()), withObject: self, afterDelay: 2.0)
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多