swift - SKLabelNode 序列动画之间有不必要的延迟

标签 swift sprite-kit skaction sklabelnode

我有 SKLabelNode 代表当前分数,每当分数值达到某个特定数字(例如 10、20 ......)时,我试图用增长和收缩序列制作动画。问题是动画本身有某种延迟,并且花费的时间比我设置的持续时间长得多。基本上它会增长,然后等待,最后收缩。

这是我的代码:

override func didMoveToView(view: SKView) {
        /* Setup your scene here */
        ...
        //skactions setting
        growAction = SKAction.scaleBy(1.2, duration: 0.4)
        shrinkAction = SKAction.scaleBy(0.8333, duration: 0.4)
        growAndShrink = SKAction.sequence([growAction, shrinkAction])
        ...
}


override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */

        if (score % 10) == 0 && score != 0 && gameState == GameState.Play {
            scoreLabel.runAction(growAndShrink)
        }       
}

我认为 update func 是正确的选择,是吗?

最佳答案

您可以在此处使用completion: 参数来调用检查该操作是否应重新运行的函数,例如

scoreLabel.runAction(growAndShrink, completion: { self.runAgain() })

runAgain 然后将包含您用于检查和重新运行操作的逻辑。基本上你可以将两者结合起来:

func runGrowAndShrinkAction()
{
    if (conditions)
    {
        scoreLabel.runAction(growAndShrink, completion: { self.runGrowAndShrinkAction() })
    }
}

旁注:如果您在序列中使用 runBlock,请考虑它是异步调用的。也就是说,completion: 的执行不会等待 runBlock 完成。

更新:另一种选择是使用 SKAction.repeatActionForever(),如果您的 update 方法中的条件发生变化,您可以删除使用 removeActionForKey() 进行操作。

关于swift - SKLabelNode 序列动画之间有不必要的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28084376/

相关文章:

objective-c - macOS Swift : How to properly add application as Login Item

Swift:覆盖方法具有不兼容的类型

swift - 无法快速将变量传递到 spritekit 中的场景

ios - iAd 定位不正确

ios - 平滑路径角以与 SKAction followPath 一起使用

ios - 在切换到新场景之前,Sprite 套件无法运行 Action

ios - 通过触摸以有限的旋转速度旋转 Sprite

Xcode、Swift、无法识别的单元测试类/方法

uitableview - ios7.1模拟器中Swift重用cells,cells被隐藏

swift - 从单例中获取可选字符串