sdk3.2 4.0にアップグレードし、マルチスレッドcococos 2 dの問題解決方法をサポート
1968 ワード
- (void) swapBuffers
{
// IMPORTANT:
// - preconditions
// -> _context MUST be the OpenGL context
// -> _renderBuffer must be the the RENDER BUFFER
#ifdef __IPHONE_4_0
if( _depthFormat && _discardFramebufferSupported ) {
GLenum attachments[] = { GL_DEPTH_ATTACHMENT_OES };
glDiscardFramebufferEXT(GL_FRAMEBUFFER_OES, 1, attachments);
}
#endif // __IPHONE_4_0
if(![_context presentRenderbuffer:GL_RENDERBUFFER_OES])
CCLOG(@"cocos2d: Failed to swap renderbuffer in %s
", __FUNCTION__);
#if COCOS2D_DEBUG
CHECK_GL_ERROR();
#endif
}
sdkが4.0にアップグレードされた後、cocos 2 dの上の関数の
if(![_context presentRenderbuffer:GL_RENDERBUFFER_OES])
この文はhomeによって発売される時にエラーを報告して、マルチスレッドを実現することができなくて、解決方法はdelegateの関数を修正することです
- (void)applicationWillResignActive:(UIApplication *)application {
[[CCDirector sharedDirector] stopAnimation];
[[CCDirector sharedDirector] pause];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[CCDirector sharedDirector] stopAnimation];
[[CCDirector sharedDirector] resume];
[[CCDirector sharedDirector] startAnimation];
}
2つの関数を追加
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[CCDirector sharedDirector] startAnimation];
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[CCDirector sharedDirector] stopAnimation];
[[CCDirector sharedDirector] pause];
}
これで修正が完了すると、エラーは発生しません.ホームキーを押すとプログラムが吹き出して保留状態になります.また、プログラムは発売前の状態に保たれます.
iPhoneのマルチスレッドは技術的に完璧ではありませんが、効果は確かにいいです.次のバージョンのマルチスレッドがもっとよくできることを望んでいます.期待しています.