2012-06-13 43 views
6

trò chơi cocos2d-x của tôi gặp sự cố khi nhập vào nền. đây là một số mã từ appdelegate:trò chơi cocos2d-x gặp sự cố khi nhập nền

// This function will be called when the app is inactive. When comes a phone call,it's be invoked too 
void AppDelegate::applicationDidEnterBackground() 
{ 

    CCDirector::sharedDirector()->pause(); 

    CCUserDefault::sharedUserDefault()->flush(); 

    CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); 

} 

// this function will be called when the app is active again 
void AppDelegate::applicationWillEnterForeground() 
{ 


    CCDirector::sharedDirector()->resume(); 

    CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); 
} 

và thông báo lỗi:

libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient: 
0x3797e094: trap 
0x3797e096: nop  

lưu ý rằng nó luôn luôn treo dành cho iPhone, nhưng 99% tai nạn trên Android (okay khi trận đấu đã không tải lớn images etc)

EDIT: Tôi đã thử CCDirector :: sharedDirector() -> stopAnimation() và nó hoạt động tốt cho iOS. Nhưng vẫn bị treo cho Android (không phải ngay lập tức. Khi quay trở lại ứng dụng, màn hình trở nên đen (nhưng tôi nghĩ nó vẫn chạy vì nhạc nền vẫn đang phát. Sau đó khoảng 5 giây sau đó nó bị treo)

EDIT 2: thông báo lỗi trong Eclipse:.

libEGL call to OpenGL ES API with no current context (logged once per thread)  (red warning text) 

libc  Fatal signal 11 (SIGSEGV) at 0x5f012000 (code=2)     (black text) 

Trả lời

5

các đại biểu ứng dụng phương thức applicationDidEnterBackground: được gọi sau chuyển ứng dụng của bạn để nền, nhưng trước ứng dụng của bạn bị đình chỉ Thật không may, bạn có thể không thực hiện bất kỳ Hướng dẫn GPU trong khi ở chế độ nền hoặc cơ quan giám sát sẽ chấm dứt bạn (như bạn thấy ở đây).

Giả sử rằng cuộc gọi CCDirector::sharedDirector()->pause() của bạn có trách nhiệm dừng vòng lặp đồ họa/hoạt ảnh, bạn nên chuyển phương thức đó sang phương thức ủy quyền applicationWillResignActive:. Phương thức đó được gọi là trước ứng dụng của bạn sẽ chuyển sang nền.

Tuy nhiên, bạn có mã được cấu trúc, đảm bảo vòng hoạt ảnh của bạn bị xóa hoàn toàn và dừng trước khi bạn quay lại cuộc gọi đại biểu applicationWillResignActive:.

Lưu ý: Câu trả lời này là ám chỉ đến lý do tại sao nó luôn luôn treo trên iOS

+0

tôi gọi là ccdirector :: sharedDirector() -> stopAnimation() và nó hoạt động tại – OMGPOP

+0

xin lỗi, treo cho android bây giờ. ios là ok – OMGPOP

+0

@OMGPOP Tôi đề nghị bạn thực hiện hai câu hỏi riêng biệt vì các lý do cho sự cố sẽ khác nhau chắc chắn. Tôi đoán là có một cuộc gọi lại khác trong Android, nơi bạn phải ngừng cập nhật GPU nhưng bạn không nhận được cuộc gọi lại. –

Các vấn đề liên quan