2015-06-19 34 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

我再次看到基本動畫! –