2011-11-11 38 views
1

我有一個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,否則它不會運行在舊設備)

在此先感謝!

+0

更新:上面內聯編輯。我剛剛意識到iPhone正在運行iOS 4.2.8,並且我沒有使用iOS 4.2模擬器進行測試。在iOS 4.2模擬器中,它不凍結,但我得到一個空白的遊戲屏幕。在所有其他模擬器(4.1到5)中,它工作得很好。但是,它在運行iOS 4.2.1的iPod Touch上工作得很好,因此看起來很奇怪。 –

回答

0

不是你的問題的答案,而是你應該做的事情的建議,試圖排除任何怪異的錯誤。首先,我假設你的設備沒有越獄,你不是在Hackintosh上開發的,對吧?

  • 清潔和重建項目(Xcode的:產品 - >清潔)
  • 重啓設備
  • 重新啓動你的Mac
  • 升級的Xcode 4.2/iOS 5中,特別是如果你仍在使用Xcode beta或Xcode 3。2
  • 嘗試不同的iPhone 4上運行(以確保它不只是你有這個問題)
  • 嘗試從頭開始創建一個新的Cocos2D項目,看是否出現的錯誤,以及
    • 如果錯誤將源代碼和資源從原始項目複製到這個新項目中,直到新項目按預期工作。然後在iPhone 4上試試看看問題是否與Build Setting相關。
  • 逐行通過代碼,看看哪一個調用實際需要這麼長時間。見:http://www.learn-cocos2d.com/2011/10/xcode-4-debugging-crashcourse/

簡單的事實,你顯然能夠選擇iOS 4.1模擬器可能表明,可能是你的Xcode安裝有問題。使用Xcode 4.2,您應該可以選擇的唯一模擬器是4.3和5.0。作爲最後的措施,刪除/ Developer文件夾並重新安裝Xcode。

請注意,打印在加粗字母中的目標中的所有構建設置已從默認設置更改。您可能想要將已更改的構建設置與新創建的Xcode項目的設置進行比較,並相應地還原構建設置。

如果您使用Xcode 4.2,則應確保Apple LLVM 3.0 Compiler是編譯器,而不是LLVM GCC 4.2。如果LLVM 3.0爲您提供了額外的錯誤和警告,請修復這些錯誤和警告。