Ios 在纹理贴图集动画之间平滑切换
如何在同一角色的多个动画之间毫不延迟地平滑过渡? 我正在开发一款iOS Swift游戏,里面有一个跳跃角色。该角色有一些动画,如基本动画、跳跃动画和着陆动画 我为每个动画设置纹理图集,如下所示:Ios 在纹理贴图集动画之间平滑切换,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,如何在同一角色的多个动画之间毫不延迟地平滑过渡? 我正在开发一款iOS Swift游戏,里面有一个跳跃角色。该角色有一些动画,如基本动画、跳跃动画和着陆动画 我为每个动画设置纹理图集,如下所示: // Basic let surferBasicAnimatedAtlas = SKTextureAtlas(named: "surfer_basic.atlas") let numImages = surferBasicAnimatedAtlas.textureNames.c
// Basic
let surferBasicAnimatedAtlas = SKTextureAtlas(named: "surfer_basic.atlas")
let numImages = surferBasicAnimatedAtlas.textureNames.count
for var i=0; i<numImages; i++ {
let surferBasicTextureName = "surfer_basic_000\(i)"
self.surferBasicFrames.append(surferBasicAnimatedAtlas.textureNamed(surferBasicTextureName))
}
// Jump
let surferJumpAnimatedAtlas = SKTextureAtlas(named: "surfer_jump.atlas")
let numJumpImages = surferJumpAnimatedAtlas.textureNames.count
for var i=0; i<numJumpImages; i++ {
let surferJumpTextureName = "surfer_jump_000\(i)"
self.surferJumpFrames.append(surferJumpAnimatedAtlas.textureNamed(surferJumpTextureName))
}
// Landing
let surferLandingAnimatedAtlas = SKTextureAtlas(named: "surfer_landing.atlas")
let numLandingImages = surferLandingAnimatedAtlas.textureNames.count
for var i=12; i<numLandingImages; i++ {
let surferLandingTextureName = "surfer_landing_000\(i)"
self.surferLandingFrames.append(surferLandingAnimatedAtlas.textureNamed(surferLandingTextureName))
}
// Pick textures
self.surferWalkingFrames = surferBasicFrames
let firstFrame = surferWalkingFrames[0]
self.character = SKSpriteNode(texture: firstFrame)
self.character.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(surferWalkingFrames, timePerFrame: (1 / 30), resize: false, restore: true)), withKey:"surferBasic")
//基本
让surferBasicAnimatedAtlas=SKTextureAtlas(命名为:“surfer\u basic.atlas”)
让numImages=surferbasicanimatedatals.textureNames.count
对于var i=0;我可能错了,但看起来(1/30)是你的罪魁祸首,原因有两个
1/30将返回一个整数,它将为0
如果你做1.0/30.0,你会得到一个很好的浮动,就像你想要的,但是它会是0.03333,你要求它两次,每秒30次切换纹理。这相当快,你甚至可能看不到它的变化
我会先试试。2,看看这会不会改变什么,如果会的话,那只是找到你需要多快改变纹理的问题
希望这会有所帮助。这确实让过渡更加顺利。过渡期之间不再有“冻结”。但是,实际的跳跃动画仍然会延迟一秒开始。所以你的回答有一定的帮助!你还有其他想法吗?@NGAFD当你说它开始晚了一秒时,是意味着你看基本动画的时间长了一点,还是一秒钟都没有动画?我唯一能想到的另一件事是将restore设置为false。我看到基本动画的时间延长了一秒钟@NGAFD您提供的代码其他一切看起来都很好。我会再次检查,以确保您在Touch begin或update中没有任何其他可能导致此问题的内容。其他问题可能是跳转数组中的第一对纹理看起来类似于basic,还原为false可能会有所帮助,或者与使用self不同。但这不太可能有什么不同。
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.character.removeActionForKey("surferBasic")
self.surferWalkingFrames = surferJumpFrames
self.character.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(surferWalkingFrames, timePerFrame: (1 / 30), resize: false, restore: true)), withKey:"surferJump")
}