gpt4 book ai didi

swift - 在正确的时间停止纹理动画 SKAction 并在 Spritekit Swift 中启动另一个纹理动画

转载 作者:行者123 更新时间:2023-11-30 13:30:11 25 4
gpt4 key购买 nike

我已经在 Spritekit 独立游戏项目上工作了大约 5 个月,现在我必须让我的英雄飞起来,并使用纹理动画让翅膀拍打。当“飞行模式”开始并且英雄跳跃时,翅膀必须露出并开始拍打。为此,我制作了 3 个不同的动画:

wigsOpenAnimation = SKAction.repeatAction(openAtlasAnimation, count: 1)
wingsFlapAnimation = SKAction.repeatActionForever(flapAtlasAnimation)
wingsCloseAnimaiton = SKAction.repeatAction(closeAtlasAnimation, count: 1)

然后是一个将打开动画与第一个襟翼动画连接起来的序列:

wingsSequence = SKAction.sequence([wingsOpenAnimation,wingsFlapAnimation])

但是,当英雄落地时必须关闭他的翅膀,这是我用来这样做的代码:

        if (self.onGround == true) || (self.flyMode == false) {
if String(wings.texture).rangeOfString("Flap8") != nil {


wings.runAction(SKAction.waitForDuration(wingsFrequency)) {
self.wings.removeActionForKey("wingsSequence")
self.wings.runAction(self.wingsCloseAnimaiton)


}

}
}

我把这段代码放在更新函数中,“Flap8”是最后一个襟翼帧纹理。问题是,使用这段代码,在开始关闭动画之前,Flap1 再次显示,所以就像 Flap 序列再次开始一样。这很糟糕,因为纹理的制作使得关闭动画必须立即在最后一个襟翼帧之后出现,并且在其之间有另一个襟翼帧看起来不太好。欢迎任何可能的解决方案。我希望我说得足够清楚,谢谢。

最佳答案

Swift 4.0 Code

这是我使用的策略:

    Sprite.run(SKAction.repeatForever(SKAction.animate(with: Sprite1TextureArray, timePerFrame: 0.15)))

DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(900) /**Amount of frames * timePerFrame*/, execute: {
//Your second animation
self.Sprite.run(SKAction.repeatForever(SKAction.animate(with: self.Sprite2TextureArray, timePerFrame: 0.15)))
})

基本上,它的作用是根据您的需要运行动画,然后在您指定的秒数或毫秒数后用新动画替换动画。

提示:0.1 秒 = 100 毫秒

关于swift - 在正确的时间停止纹理动画 SKAction 并在 Spritekit Swift 中启动另一个纹理动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36651340/

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