У меня есть приложение Cocos2d (1.0.1), которое ломается на моем iPhone 4 под управлением iOS 4.2.8.Он отлично работает в симуляторах 4.1, 4.3 и 5.0.Он отлично работает на iPhone 3g и iPod Touches с 4.2.1.Но он ломается по-другому на 4.2 сим.
На моем телефоне он зависает, когда я пытаюсь настроить вид GL и подключить к нему режиссер и сцену.Там нет ошибки и нет простого объяснения того, что пошло не так.В симуляторе 4.2 рассматриваемое представление OpenGL просто пустое, но замораживания не происходит.
Остановка даже не является «крахом».Он просто замерзает, затем, примерно через 60-75 секунд, он размораживается и продолжается, как будто ничего не происходит.После того, как устройство разморозилось, все мои входные данные, похоже, были буферизованы, потому что все они последовательно проходят (включая снимки экрана, отключение телефона, нажатие кнопки «Домой» и т. Д.)
Кроме того, само приложение работает отличнопосле разморозки.Но игра должна длиться всего 60 секунд, поэтому сначала она вообще не работала, потому что была в каком-то странном состоянии, потому что была заморожена, когда игра должна была закончиться.Но потом, просто в целях отладки, я удлинил игровой лимит до 95 секунд, и он стал полностью играбельным после разморозки (обычно, когда осталось 15 секунд) и в этот момент работает безупречно.
Вот viewWillAppearметод, где он замерзает.(Я практически ничего не делаю в init:)
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.view.subviews.count == 0)
{
UIImageView *scoreAreaBackground = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ScoreBar" ofType:@"gif"]]];
scoreAreaBackground.frame = CGRectMake(0, CalculateScoreAreaTop(), GAME_SCREEN_WIDTH, CalculateScoreAreaHeight());
[self.view addSubview:scoreAreaBackground];
image1View = [[[UIView alloc] initWithFrame:CGRectMake(CalculateImageLeft(), CalculateImageTop(), CalculateImageWidth(), CalculateImageHeight())] retain];
[self.view addSubview:image1View];
EAGLView *glView = [EAGLView viewWithFrame:CGRectMake(CalculateGridX(gameParameters.boardWidth), CalculateGridY(gameParameters.boardHeight), CalculateGridWidth(gameParameters.boardWidth), CalculateGridHeight(gameParameters.boardHeight))
pixelFormat:kEAGLColorFormatRGB565 // kEAGLColorFormatRGBA8
depthFormat:0 // GL_DEPTH_COMPONENT16_OES
];
[self.view addSubview:glView];
CCDirector *director = [CCDirector sharedDirector];
[director setOpenGLView:glView];
[director setAnimationInterval:1.0/60];
[director setDisplayFPS:NO];
...
Я постепенно закомментировал каждый фрагмент кода, и "оскорбительная" строка такова:
[director setOpenGLView:glView];
Это нена самом деле заморозить при выполнении этой строки.Я могу отладить и пройти через весь метод viewWillAppear, и он отвечает нормально.Затем, когда я нажимаю «Продолжить выполнение программы», приложение останавливается.
Под оскорбительной строкой я подразумеваю, что я могу закомментировать все, что после этого (и весь код, ссылающийся на Cocos2d в остальной части приложения), иУстройство будет зависать точно так, как описано.Затем, если я закомментирую эту строку, она прекрасно работает без остановки - кроме, конечно, ничего не происходит в моем представлении OpenGL.
У кого-нибудь есть идеи, что здесь не так?Особенно странно, что это отлично работает на других устройствах и на симуляторе, но не работает только на моем телефоне, что заставляет меня подозревать какую-то настройку сборки (у меня настроено требование armv6, так как в противном случае он не работал бы настарые устройства вообще)
Заранее спасибо!