私はcocos2dゲームを持っています。ゲームがロードされて実行されると、55〜60fpsで実行されます。
ただし、メニューとゲームの両方にスプライトシート(それぞれ1つ)を使用しているため、ゲームをロードするときにクロスオーバーのポイントがあり、メモリにロードされる大きな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(スプライトシートと座標内の個々の画像のフレーム名)を読み込もうとしたときに発生します。