У меня есть javascript-игра, которую я хочу запустить на iOS. Javascript отправляет количество изображений, которые нужно нарисовать, и их позиции. Я использовал SpriteKit для рисования изображений, поэтому я создаю SKTexture из имени изображения и добавляю его в родительский узел.Какое максимальное количество текстур за кадр
Проблема в том, что я рисую 30 текстур/кадров. Частота кадров очень медленная на iPad3 (она хорошо работает на iPhone 5s). Я замечаю, что создание одной текстуры занимает 0.178 секунды, а загрузка ее из словаря занимает около 0.0036 секунды.
Так что для 30 текстур, обновление одного кадра займет 0,1 секунды, в то время как мне нужно, чтобы оно составляло 0,016, чтобы получить 60 кадров в секунду.
Есть 30 текстур в кадре, это слишком много? Какая альтернатива?
Есть ли спрайт правильной рамки для использования? Я хочу настроить iOS7, iOS8.
Edit: Вот как я получаю текстуры
func getTexture(imageNamed: String) -> SKTexture?{
if let texture = cache.getObject(imageNamed) {
return texture
}else {
let texture = SKTexture(imageNamed)
cache.putObject(texture, forName: imageNamed)
return texture
}
}
Затем я добавляю его в узел SpriteKit в:
if let texture = getTexture(imageName) {
let imageNode = SKSpriteNode(texture:texture)
imageNode.anchorPoint=CGPointMake(0, 1)
imageNode.position = CGPoint(x:x, y:y)
parentNode!.addChild(imageNode)
}
Так выше код, будет создавать текстуру один раз и добавить его в кеш, и в следующий раз, когда это потребуется, оно будет доставлено из кеша. В настоящее время я не выпускаю текстуры из кеша, потому что у него небольшое количество текстур.
При следующем обновлении я удаляю всех детей из parentNode и снова добавляю текстуры на основе новых позиций.
Я не хочу добавлять действия Sprite, потому что у нас уже есть игра в javascript, и мы не хотим переписывать iOS, поэтому мы просто хотим добавить слой между js и iOS.
Рисунок 30 SKSpriteNodes в кадре обычно не представляет проблемы. У меня есть игра в AppStore, которая рисует сотни SKSpriteNodes. Почему вы не загружаете свои 30 SKSpriteNodes один раз во время запуска вашего приложения и перемещаете узлы в каждом цикле обновления? И почему вы используете JavaScript для вычисления триплетов 30 (ImageNumber, xPosition, yPosition)? По крайней мере, так я это понял. – Nero
Вы «создаете» эти текстуры в каждом кадре или просто «рисуете» их. Между ними существует значительная разница. Здесь недостаточно информации, чтобы помочь вам эффективно. Если вы создаете 30 изображений для каждого кадра, возможно, вам нужно подумать о пуле. Просто не совсем понятно, что вы на самом деле делаете, когда используете слова draw/create в разных точках. Возможно, добавьте код, чтобы указать, что вы на самом деле делаете. – prototypical
Как сказал Нерон, рисунок 30 'SKSpriteNode' каждый кадр не является проблемой. Дьявол, скорее всего, в деталях. – prototypical