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

Я вижу основную анимацию на секунду дольше! –

Смежные вопросы