) 나는 게임을로드하고 실행하면 55 ~ 60fps로 실행됩니다.게임에서 화면로드 (
그러나 내 메뉴와 게임 (각각 하나씩)에 스프라이트 시트를 사용했기 때문에 메모리에로드 된 너무 많은 큰 png로 인해 메모리 경고가 발생할 수있는 게임로드시 크로스 오버 포인트가있었습니다.
로딩을 위해 간단한 CCScene을 구현했습니다 (경량이며 메인 게임을로드하기 전에 메뉴가 비활성화되도록 함).
이것은 훌륭하게 작동합니다. 그러나, 나는로드 블록 옆에, 나는 로딩 화면 옆에 단어로드 (회전하고있는 일이 벌어지고 있음) 옆에 회전하는 주인공이있다.
나는 다른 스레드에서 게임을로드하기 위해 NSThread를 사용할 수 있음을 발견했기 때문에로드하는 장면의 애니메이션을 방해받지 않고 계속 사용할 수 있습니다 (매우 즐거운 사용자 경험을 위해 제작되었습니다).
그러나 5-6/10 번,이 오류 메시지가 나타납니다.
Received memory warning. Level=1
*** -[NSLock dealloc]: lock (<NSLock: 0x3ded70> '(null)') deallocated while still in use
*** Break on _NSLockError() to debug.
*** -[CFDictionary setObject:forKey:]: message sent to deallocated instance 0x3decc0
내 게임을로드하는 데이 코드를 사용하고 있습니다. 버튼 내
--(void) goToNextScene {
NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
EAGLContext *k_context = [[[EAGLContext alloc]
initWithAPI :kEAGLRenderingAPIOpenGLES1
sharegroup:[[[[CCDirector sharedDirector] openGLView] context] sharegroup]] autorelease];
[EAGLContext setCurrentContext:k_context];
CCScene *gs = [GameEngine scene];
[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:0.5 scene:gs]];
[autoreleasepool release];
}
내가 일어나기에서 일어나고있는 것을 방지 할 수 방법에 대한 아이디어를 - 새로운 스레드에서 실행
NSThread* thread = [[[NSThread alloc] initWithTarget:self selector:@selector(goToNextScene) object:nil] autorelease];
[thread start];
방법?
NSLock은 그가 dealloced되고있어 CCSpriteFrameCache 아니에요 있지만, gameScene 당신은 정확하게 자신을 진단받은 gamesheet.plist (TEH spritesheet 내에서 개별 이미지의 framenames 및 좌표)
나는 이것에 대해 좀 더 조사를 해봤는데, 게임이 로딩 전환 동안 메모리 경고 1을 받으면 충돌이 5-6/10 번 발생합니다. 이 때문에 CCSpriteFrameCache가 dealloc을 얻거나 다른 스레드로 이동하게되는지 궁금합니다. – Bongeh