2013-07-15 1 views
-1

Это новый тип проблемы, с которой я столкнулся в своей игре. Могу сказать, что я реализовал весь код для игры. Но я столкнулся с проблемой. На самом деле, что происходит, когда я играю его больше, чем 5-6 раз, тогда игра становится медленнее, значит, мы можем чувствовать, что она идет медленно. Но это FPS 60, но колебания FPS происходят между 60 и 30.Игра становится медленной, если после игры 5-6 раз в Cocos2d-iphone

В моей игре я внедрил ARC. Я также вижу, что каждый раз номер объекта, присутствующего в сцене, одинаковый.

Я также использовал инструменты для проверки утечки памяти в игре, но есть нет утечки памяти в игре. Я не могу показать код, потому что он конфиденциальный.

Но я не смог решить эту проблему. Я хотел бы знать, что может быть причиной этого и как я могу решить эту проблему.

Любой вид помощи может быть полезным

+0

Я думаю, это из-за сложного кода и вычислений. Как удалить сложность? – Renaissance

+0

Я принимаю вниз, но, по крайней мере, оставляю разум в комментарии .. так что я могу научиться этому. – Renaissance

+0

Думаю, вам не повезло, так как вы не можете каким-то образом описать нам, что вы делаете. –

ответ

3

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

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

// below code with cocos2d 2.x 

NSLog(@"*** before purge ***"); 
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo]; 

[CCAnimationCache purgeSharedAnimationCache]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames]; 
[[CCDirector sharedDirector] purgeCachedData]; 
[self scheduleOnce:@selector(dumpTextures) delay:0.5f]; 

// let the run loop cycle a bit 
// to give a chance for auto-release objects to be 
// disposed from the pool ... 

-(void) dumpTextures { 

    NSLog(@"*** after purge ***"); 
    [[CCTextureCache sharedTextureCache] dumpCachedTextureInfo]; 

} 

и проверьте результат. Ищите любую текстуру, которая по-прежнему держится для вас, - cocos2d ... Скорее всего, память свирепствует. Я не думаю, что 5-6 раз 500K сыграет большую роль в игре, которая достигает 140 Мб.

+0

эй, я попробовал то, что ты говоришь. И я получил информацию ниже, когда я перезапустил свою игру: *** перед чисткой *** cocos2d: CCTextureCache dumpDebugInfo: \t 58 текстур, \t для 56535 КБ (55,21 МБ) и *** После очистки *** CCTextureCache dumpDebugInfo: \t 55 текстуры, \t для 53181 KB (51.94 MB) – Renaissance

+0

Так что же мне делать ??? Должен ли я удалить другие вручную? Удаляя данные об очистке, осталось еще 55 текстур до перехода в новую игру. – Renaissance

2

Существует разница между утечки памяти и отказ от памяти. ARC помогает с утечками, но по-прежнему позволяет сохранять сильные ссылки на ваши объекты, когда они больше не нужны. Примером этого является сохранение циклов.

Вы можете выполнить технику, известную как Heapshot Analysis. Используя инструменты, он покажет вам, какая память сохраняется, когда она не должна быть больше после окончания игры.

Здесь есть учебник по Heapshot. http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode

+0

эй я выполнил анализ Heapshot в 4-5 раз, когда я перезапустил игру, и каждый раз получаю не объект вокруг 500 КБ, знаете ли вы что-нибудь об этом, как это решить ... – Renaissance

+0

+1 Спасибо Бен за то, что указал на отличную игру. – YvesLeBorg

+0

Да, Бен, я забыл рассказать тебе, спасибо, любым способом, Thanx для этого урока ... мне это очень помогает. – Renaissance

Смежные вопросы