gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:31:21 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com