2015-06-19 36 views
0

如何在同一个角色上的多个动画之间平滑过渡?纹理地图集动画之间的平滑切换

我正在用跳跃角色开发iOS Swift游戏。这个角色有一些动画,如基本动画,跳跃动画和着陆动画。

我设置的纹理地图,每动画如下:

// 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") 

当我触摸屏的基本的动画应该停止和跳跃的动画应该运行,但它会导致延迟。在触摸跳​​跃动画开始后约一秒钟。

我已经试过这样:

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") 
} 

我怎样才能让多个动画之间的平滑过渡上相同的字符无延迟?

回答

0

我可能是错的,但它看起来像(1/30)是你的罪犯有几个原因。

  1. 1/30将返回一个int,这将是0
  2. 如果你做1.0/30.0像你想,你会得到一个不错的浮动,但它会0.03333333333333和你问这两个交换纹理每秒30次。这是相当快的,你甚至可能看不到它改变。

我会先试试.2看看它是否会改变任何东西,如果它确实如此,那么它只是发现你需要改变纹理的速度。

希望有帮助。

+0

它确实使转换更平滑。在转换之间没有“冻结”了。然而,实际的跳跃动画还是晚了一秒。所以你的回答部分有帮助!你还有其他建议吗? –

+0

@NGAFD当你说它迟到了第二个时候,这是否意味着你看到基本的动画更长一点,或者它一秒钟不动画?我能想到的唯一的另一件事是将恢复设置为false。 –

+0

我再次看到基本动画! –