2013-04-21 3 views
1

Я только что закончил быстрый прототип первого прототипа iPad-приложения cocos2d. Я не изменил файл CCTextureAtlas.m.cocos2d iPad сбой при настройке [_director displayStats: NO]

приложение работает нормально, когда я оставляю [director_ setDisplayStats:YES] в AppDelegate, но если удалить эту строку или заменить [director_setDisplayStats:NO], он выходит из строя в CCTextureAtlas.m.

-(void) drawNumberOfQuads: (NSUInteger) n fromIndex: (NSUInteger) start на линии 522, который гласит:

glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, (GLvoid*) (start*6*sizeof(_indices[0])));

Для справки, [director_ setDisplayStats:YES] находится на линии 154 AppDelegate.m.

Весь исходный код для приложения прототипа находится здесь:

https://github.com/GameAid/Toddler-Taxonomist

Для немного контекста для тех, кто может посмотреть на код, после нажатия Start, BoardLayer является основным узлом который координирует большую часть работы и что показывает на экране.

Для жизни я не могу понять, что я делаю, что вызывает у нас проблему. Сначала я подозревал, что мое использование [[CCTextureCache sharedCache] removeUnusedTextures] (в «BoardLayer») было проблемой, но теперь я думаю, что это не имеет никакого значения.

Это стек вызовов, который появляется в Xcode:

enter image description here

Любые идеи о том, как я могу решить эту проблему?

ответ

1

Ну, я был бы осторожен, прежде чем устанавливать очистку на NO (утечки скрываются, если вы не будете осторожны). Я был в состоянии запустить приложение без FPS, когда (в ccConfig.h) я изменить

#define CC_ENABLE_GL_STATE_CACHE 1 

в

#define CC_ENABLE_GL_STATE_CACHE 0 

в вашем ответе выше, там, кажется, существует противное связь здесь на уровне GL , Я не думаю, что эта оптимизация (state cache) будет очень сильно влиять (если вообще) на воспринимаемую производительность вашего типа приложения.

ps: хорошая графика, вероятно, станет любимой для многих детей 7-77 лет.

+1

Хех, спасибо! Чем дольше вы играете в нее, тем сложнее возникают вопросы. :) Я, вероятно, всегда буду иметь версию github, доступную бесплатно, когда закончится, так как я пытаюсь запустить GameAid. Я посмотрю ваше предложение. Я ценю помощь. – Clay

2

В BoardLayer.m, я использовал [self removeAllChildrenWithCleanup:YES], что, казалось, вызывало проблему. Когда я изменил его на [self removeAllChildren], все работает так, как ожидалось, когда [director_ setShowStats:NO] на месте.

Я не уверен, какова природа этого конфликта - он, кажется, находится на низком уровне OpenGL, но он исправлен в моем коде.