Swift SpriteKit动画之间的正确过渡
我有一个空闲的播放器动画,我想做一些动画之间的平稳过渡。空闲动画是默认的,从那个过渡我希望能够切换到另一个状态(比方说战斗),然后回到空闲状态。空闲角色动画的代码当前类似于:Swift SpriteKit动画之间的正确过渡,swift,xcode,sprite-kit,Swift,Xcode,Sprite Kit,我有一个空闲的播放器动画,我想做一些动画之间的平稳过渡。空闲动画是默认的,从那个过渡我希望能够切换到另一个状态(比方说战斗),然后回到空闲状态。空闲角色动画的代码当前类似于: self.addChild(playerAnimation) playerAnimation.runAction(SKAction.repeatActionForever( SKAction.animateWithTextures(playerAnimationManager.idleManAnim
self.addChild(playerAnimation)
playerAnimation.runAction(SKAction.repeatActionForever(
SKAction.animateWithTextures(playerAnimationManager.idleManAnimation.textureArray, timePerFrame: 0.1)))
现在,这将永远持续下去,但我需要截取它并在其上添加一个新动画(这是同一个角色,处于新状态)。我在想,我应该停止闲置的动画,切换到新的,然后在完成后返回闲置,但我不相信这是链接动画的最佳方式,我还没有找到一个好的资源来解释如何进行
有什么建议吗?谢谢 根据纹理数组的长度,您可能可以执行此操作 我将尝试在不使用代码的情况下解释我如何使用
objective C
以及您如何使用Swift
Boolean
,并且应该设置为NO
。您可以称之为idleFlag
idleFlag
设置为NO
。让我们调用方法“beginFightAnim
”repeatActionForEver
空闲动画中,在animateWithTextures
动画之后添加runBlock
动画。在这个块中,定义一个静态变量(一个在反复调用块时会被记住的变量)并将其递增+1,添加一个类似于->if的“if语句”(my\u static\u var==纹理动画和idleFlag中的帧数)
。在“if语句”中,将静态变量设置为0并调用“beginFightAnim
”idleFlag
设置为YES
希望它能起作用
如果您有任何问题,请在下面进行评论。我想举一系列例子,让您更容易理解这件事。假设您的节点名为
playerImation
,这是一个典型的atlasc,其中包含一个plist
player-idle1.png
player-idle2.png
player-idle3.png
...
如果要实时截取动画,以了解此时正在运行的帧,可以执行以下操作:
override func update(currentTime: CFTimeInterval) {
if String(playerAnimation.texture).rangeOfString("player-idle") != nil {
print(String(playerAnimation.texture))
}
}
此时,在将“关键点”指定给动作后(withKey:“idleAnimation”
),您可以在准备开始下一个动画时停止特定的空闲动作
另一个好方法是构建一个结构,以便在每次启动新动作或动画时了解玩家状态并修改此变量:
enum PlayerStatus: Int {
case Idle = 1
case Fight = 2
case Run = 3
case Jump = 4
case Die = 5
...
}
var currentStatus: PlayerStatus!
这听起来确实是一个合理的解决方案。让我试一下,看看效果如何,谢谢!这对你有用吗?上次我在animateWithTextures事件中尝试从精灵获取纹理时,它将返回原始纹理,而不是动画,我最终编写了自己的操作来处理此问题。是的,在发布之前尝试确保安全。我已将文件夹atlas创建的atlasc用于所有帧,当您构建应用程序并在内容包内搜索时,您会找到atlasc。我可以在动画中一步一步地看到所有帧的名称,所以,现在,我不知道关于它的问题帧的名称不是我所关心的,它是得到你使用的实际纹理,它实际上是打印idle1,idle2,idle3…等等?是的,伙计,我在动画中看到的正是,同时在控制台调试中打印的,你们看到印刷和显示的框架,你们是什么意思?我想知道这是否被更改或修复了,也许是因为我有不同的设置导致了问题,如果我再次遇到这个问题,我会回来找你们