我有一个 cocos2d 游戏,一旦游戏加载并运行,它的运行速度在 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
我正在使用此代码加载我的游戏。
在一个按钮内 -
NSThread* thread = [[[NSThread alloc] initWithTarget:self selector:@selector(goToNextScene) object:nil] autorelease];
[thread start];
在新线程中执行的方法 -
-(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];
}
关于如何防止发生的任何事情发生的任何想法?
NSLock 是在 gameScene 尝试加载 gamesheet.plist(精灵表和坐标中的单个图像的帧名)时引起的