2013-08-25 128 views
0

我正在製作一個cocos2d box2d遊戲,有多個關卡。我用CCParticleSystem模擬了一個粉碎效果。每個關卡都有一個重放按鈕。問題是在我的iPod touch上(4每當我按下關卡上的重播按鈕時,它就會崩潰。 我重播的解決方案是:Cocos2d場景切換和替換問題

CCMenuItemImage *replay = [CCMenuItemImage itemWithNormalImage:@"replaybutton.png" selectedImage:@"replaybutton_pushed.png" block:^(id){ 
NSLog(@"*** REPLAY BUTTON PRESSED ***"); 
[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:0.5f scene:[[self class] node]]]; 
}]; 

iOS的模擬器做它沒有崩潰,但我真正的設備沒有。 我無法調試,因爲Xcode不能識別任何錯誤,如「EXC_BAD_ACCESS」。 我能看到的唯一的事情就是在日誌中一個OpenGL錯誤:

OpenGL error 0x0501 in -[CCParticleSystemQuad postStep] 411 

同一種崩潰的發生也,如果我在一個水平發揮,回到主菜單,切換到另一個層次。

如果有人能幫助我,我會很開心。甚至找到崩潰的根源。

+0

您是否啓用了異常斷點? https://developer.apple.com/library/ios/recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html。另外,請確保您在連接到Xcode的調試模式下在設備上運行遊戲。如果這仍然沒有顯示任何東西,那麼iOS可能會因爲內存不足而關閉遊戲。你使用多少內存?注意任何泄漏或保留週期。 –

+0

按下調試器繼續,看看它是否繼續?我有時會出現這種情況,它似乎是一個可恢復的錯誤 –

+0

謝謝。如果我內存不足,如何跟蹤。這是可能的,因爲在iPhone 5上我的應用運行良好。 – kommancs96

回答

0

我想問題是與 [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:0.5f scene:[[self class] node]]];

尤其在場景中:[[self class] node]]。

你看到當我們調用replace場景時,現有的場景被銷燬,這意味着它會被釋放,所有這一切。現在,當您試圖放回這個釋放場景時,您會發生崩潰,並且由於它以動畫形式運行,因此您甚至無法追溯它。

你可以做什麼,或者至少嘗試是創造這個場景的一個新實例,然後調用

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:0.5f scene:newSceneInstanceOfTheSameClassYouJustCreated]; 

讓我知道是否可行。

+0

你也可以在Xcode中啓用殭屍來驗證我剛纔所說的。 –