2015-11-03 3 views
3

Короче:Cleaner (лучше) альтернатива использованию функции обновления в Swift

Есть ли лучший способ запустить большие функции в течение длительного времени, что меньше «lagy» и память оскорбительным, чем положить все это в функция обновления?

Полный вопрос

Я в настоящее время в завершающей стадии разработки своего первого приложения игры с использованием IOS Swift и SpriteKit. Одна из больших проблем, которые я получил, - отставание/задержка. Инструмент Time Profiler указал, что мой override func update использовал много памяти и времени. Моя функция обновления состоит из:

override func update(currentTime: CFTimeInterval) { 

    if hasStarted { 

     // Character 
     updateCharacterPosition() 
     updateJumpMotion() 

     // Blocks 
     blockRunnerDebug() 

     // Wave 
     debugRunningBarPosition() 

     // Game Engine 
     gameEngine() 
     debugGameEngine() 
    } 

    // Update Scenery 
    updateScenery() 
} 

Как видите, у него много функций. Большинство из них выполняют фоновые анимации, такие как вода, облака или прыгающая анимация персонажа.

Пример:

// Move y 
     self.cloud01.position.y = self.cloud01.position.y + (CGFloat(createSinWave(0.5, b: b, angle: angle))) * 0.3 
     self.cloud02.position.y = self.cloud02.position.y + (CGFloat(createSinWave(0.5, b: b, angle: angle))) * 0.3 

Мой вопрос: есть ли лучший способ запустить большие функции в течение длительного времени, что меньше «lagy» и память оскорбительным, чем положить все это в функции обновления?

Благодаря

ответ

2

Элементов, которые могут изменить направление или положение на основе взаимодействия с пользователем должен быть в обновлении. Об этом нет.

Для таких элементов, как фоновая анимация, вы можете (и должны) устанавливать их один раз в начале и помещать их в бесконечный цикл анимации вместо того, чтобы вручную обновлять положение каждого обновления. Это должно многое помочь.

+0

Каков наилучший способ сделать это? 'SKAction.runBlock'? –

+1

Да. Это зависит от того, что вы делаете, если run block является «лучшим», но, вероятно, так. Что-то по строкам: runAction (SKAction.repeatActionForever (SKAction.runBlock (doAction))) – Jeremiah

+0

Хорошо, спасибо! Попробуй это. –