2013-11-11 4 views
2

Я сейчас возиться с Sprite Kit на прошивке, чтобы выяснить, если это будет уместно, чтобы сделать рамки относительно простого 2D игр вSprite Kit - Анимация и память Managment

Из-за мой ActionScript фон, я. Мне очень удобно работать с Sprite Kit по коду

Но есть кое-что, что я просто не могу понять. Анимированные узлы с Texture Atlas в качестве ресурса невероятно насыщены памятью. Я импортировал атлас в свой проект (размер текстур составляет около 35 МБ). Предзагрузка текстуры в оперативной памяти, кажется, хорошо, но в данный момент я запустить фактическую анимацию, увеличивается размер кучи exponentinaly (приблизительно от 80MB до 780MB)

Вот идет мой код:

self.noahFrames = [[NSMutableArray alloc] init]; 
SKTextureAtlas *noahAtlas = [SKTextureAtlas atlasNamed:@"noahAnimati"]; 

int imgCount = noahAtlas.textureNames.count; 
for (int i=1; i <= imgCount; i++) { 
    NSString *textureName = [NSString stringWithFormat:@"NoahMainMenuAnimation_%d", i]; 
    SKTexture *temp = [noahAtlas textureNamed:textureName]; 
    [self.noahFrames addObject:temp]; 
} 


SKSpriteNode *noahNode = [self createSpriteWithName:@"noah" imagePath:@"Noah_main_menu_hd" positionXPath:@"MainMenu.Noah.x" positionYPath:@"MainMenu.Noah.y" scalePath:@"MainMenu.Noah.scale"]; 
[self addChild:noahNode]; 

//up to this point everything goes fine 

[noahNode runAction:[SKAction repeatActionForever: 
        [SKAction animateWithTextures:self.noahFrames 
             timePerFrame:0.1f 
              resize:YES 
              restore:YES]] withKey:@"animatedNoah"]; 

Так я предполагаю, что мой актуальный вопрос почему приложение становится настолько безумно памяти, что после вызова анимации SKAction? Я должен упустить что-то довольно очевидное ...

+0

Итак, как только вы на один шаг по линии runAction увеличиваете использование памяти? Или вы, возможно, запускаете это действие снова и снова для каждого кадра, возможно, для нескольких узлов? – LearnCocos2D

+0

Точно. И нет, я не называю действие снова и снова. Его называют только один раз и для одного узла. – Casper522

+1

Я сталкиваюсь с тем же вопросом с iPad 2. Мое приложение на основе spritekit, выпущенное в магазине приложений, сегодня мгновенно сбрасывается, когда отображается диспетчер представлений с представлениями spritekit. Эти представления spritekit не имеют анимации, просто простые одноцветные спрайноды (даже не изображения, просто простые узлы с одним цветом). У меня есть 7 просмотров spritekit на той же странице, но iPad 2 не может справиться с этим. – Shawn

ответ

0

Я знаю, что когда текстура загружается в графическую память, она загружается без какого-либо сжатия, но я не думаю, что xcode контролирует графическую память, поэтому мне действительно странно , Я обычно загружаю и выполняю анимацию так же, как и вы, и у меня нет такого поведения памяти, , но я это заметил при тестировании на тренажере. Используете ли вы симулятор iOS для своих тестов? Сбой приложения при достижении этих уровней памяти?

+0

Это хороший момент, который у вас есть. При достижении этих уровней памяти приложение не падает. В настоящее время я не располагаю устройством iOS, но я отправлю его моему другу, чтобы он мог попробовать его на своем iPad и посмотреть, что. Я дам вам знать, как все прошло. – Casper522

+0

Итак, я попытался запустить приложение на устройстве (iPad2). несколько кадров после запуска размера кучи анимации достигли 256 МБ (это самая система дает вам iPad 2 ... я думаю) и разбился. – Casper522

+0

Возможно, ваш код вызывается несколько раз (попробуйте отладить с помощью nslog) или ошибка находится в другой части вашей программы. – membersheep