Я создаю игру с комплектом спрайтов, и я использую файл plist для задания свойств каждого уровня. Одним из свойств в моем файле plist является словарь, называемый шаблонами, который содержит n элементов, где каждый из элементов является блоком, с ручной настройкой x и y позиций. Эта модель отлично работает для той игры, которую я делаю, так как очень удобно быстро устанавливать уровни. Тем не менее, я столкнулся с одним недостатком, который я не могу решить из-за отсутствия опыта кодирования: на некоторых уровнях есть до 290 блоков, поэтому, когда приложение пытается прочитать уровень, приложение замерзает примерно на 5 секунд. Это очень раздражает пользователя. Вначале мой подход: прочитать файл plist, и для каждого элемента вызов метода, который создает блок как SKSpriteNode, используя свой метод imageNamed. Я думал, что это причина, по которой она так сильно отстает, что я пытаюсь загрузить 300 спрайтов во время работы, как многообещающая причина проблемы. Затем я попробовал следующее: я сделал метод, который загружает пул блока изначально, когда игра начинается в первый раз. Это мой метод для этогоУлучшение производительности спрайтов Sprite kit
func addObsticles1ToPool() {
for i in 0...300 {
let element = SKSpriteNode(imageNamed: "obsticle1")
element.hidden = true
obsticle1Pool.append(element)
}
}
Тогда, мой код считывает файл Plist, и для каждого блока вызывает следующее:
func block(x: CGFloat, y: CGFloat, movingUp: Bool, movingSide: Bool, spin: Bool, type: Int16) {
var block: SKSpriteNode!
for obs in obsticle1Pool {
if obs.hidden {
block = obs
break
}
}
block.hidden = false
// Further down the properties of the block are set, such as actions it should perform depending on the input values, also its physics body is set.
У меня также есть методы обработки, что новые элементы должны быть добавленным в пул, как игра, выручка и все, что работает очень хорошо. Время запаздывания сократилось примерно до 3,5-4 с, но это все еще недостаточно хорошо. Я хотел бы иметь игру без лаг. Однако я не уверен, есть ли другой, более эффективный способ делать то, что я пытаюсь сделать, чем использовать пул спрайтов. Кто-нибудь знает, как уменьшить это отставание?
Добавить экран загрузки? –
Простое решение, но это не в моих требованиях к пользовательскому интерфейсу:/ – TruniTr
у вас предварительно загружены все изображения ур? – Wraithseeker