2013-12-04 1 views
0

У меня есть 100 текстур, каждый размером ~ 100 кб, и я хочу создать SKAction с анимацией этих текстур в течение 4 секунд с 25 кадрами в секунду и циклическим действием навсегда. Я загружаю их из атласа (или нескольких, поскольку Xcode предупреждает меня, что он разбивает атлас на 9).Использование высокой памяти в SpriteKit при использовании текстурного атласа

Проблема в том, что использование памяти увеличивается с 4 до 150 мб, когда я запускаю действие. Все нормально в первые три шага. Общий размер активов составляет ~ 12 мб.

Может ли использование нескольких атласов (разделение Xcode на время компиляции) может вызвать эту проблему?

// Load the frames to an array 
NSArray *sTreesRightAnimationFrames = ITBLoadFramesFromAtlas(@"s01-trees-right", @"s01-trees-right-", 100); 
// Create the action 
SKAction *sTreesRightAction = [SKAction animateWithTextures:sTreesRightAnimationFrames timePerFrame:1.0f/25.0f]; 
// Create the forever action 
SKAction *sTreesRightForeverAction = [SKAction repeatActionForever:sTreesRightAction]; 

// Preload the textures and run the action 
[SKTexture preloadTextures:sTreesLeftAnimationFrames withCompletionHandler:^{ 
    [treesLeft runAction:sTreesLeftForeverAction]; 
}]; 
+0

С очень большими текстурами, это не будет иметь никакого значения, чтобы поместить их в атласе против в PNG изображения для каждого кадра. Что вы можете сделать, это уменьшить размер памяти в текстурах http://stackoverflow.com/a/38679128/763355 – MoDJ

ответ

3

Размеры, размеры, размеры, размеры. Потому что они не говорят вам, сколько памяти будет использовать текстура из данного изображения. Для того, чтобы подсчитать, что для любого заданного (атласа) используй:

width x height x (color bit depth/8) = size in bytes 

Например:

1024 x 1024 x (32/8) = 4194304 Bytes = 4 Megabytes 
+0

Да, они являются файлами. В этом случае все проверяется. В этом случае мне нужно найти лучший способ оживить эти текстуры. – emrekyv