我有一個Cocos2d應用程序(1.0.1)在運行iOS 4.2.8的iPhone 4上出現故障。它在4.1,4.3和5.0模擬器中工作正常。它也適用於運行4.2.1的iPhone 3g和iPod Touches。但它在4.2模擬器上打破了另一種方式。Cocos2D在iPhone 4上死機
當我嘗試設置GL視圖並掛接導演&場景時,我的手機會凍結。沒有錯誤,也沒有簡單的解釋錯誤的原因。在4.2模擬器中,所討論的OpenGL視圖只是空白的,但沒有凍結。
凍結甚至不是一個「崩潰」,完全是。它只是凍結起來,然後大約60-75秒後它解凍並繼續,好像什麼都沒有。設備解凍後,我的所有輸入似乎都被緩衝了起來,因爲它們都按順序排列(包括屏幕截圖,睡覺電話,按Home鍵等)。
此外,應用本身在完成解凍。但是,遊戲只能持續60秒,所以起初看起來並沒有工作,因爲它會處於一種奇怪的狀態,因爲當遊戲本應結束時它會被凍結。但是爲了調試目的,我將遊戲時間限制延長到了95秒,並且在解凍後(通常在剩下15秒時)完全可以播放,並且在那時看起來完美無缺。
下面是viewWillAppear方法,它凍結。 (我做初始化:)
- (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,否則它不會運行在舊設備)
在此先感謝!
更新:上面內聯編輯。我剛剛意識到iPhone正在運行iOS 4.2.8,並且我沒有使用iOS 4.2模擬器進行測試。在iOS 4.2模擬器中,它不凍結,但我得到一個空白的遊戲屏幕。在所有其他模擬器(4.1到5)中,它工作得很好。但是,它在運行iOS 4.2.1的iPod Touch上工作得很好,因此看起來很奇怪。 –