私は cocos2d を使用していますが、次の問題に遭遇しました。
[[CCDirector sharedDirector] runWithScene: [MenuScene node]];
シーンを切り替えるとき、私はいつも以下を使用します。
[[CCDirector sharedDirector] replaceScene:[SceneName node]];
これは正常に動作し、MenuScene から GameScene に切り替えてから、GameOverScene に切り替えてから、MenuScene に戻すことができます。しかし、もう一度 GameScene に切り替えてから、もう一度 GameOverScene に切り替えて、MenuScene に 2 回目 (最初の runWithScene 呼び出しをカウントする場合は 3 回目) に切り替えようとすると、アプリがクラッシュし、次のエラー メッセージが表示されます。
*** -[EAGLView swapBuffers]: message sent to deallocated instance 0x9614f80
sharedlibrary apply-load-rules all
私が読んだことによると、常に少なくとも 1 つのシーンが存在するはずです (ここではそうでしょうか?)。また、他のすべてのシーンに pushScene を使用し、最後に popScene を使用して MenuScene に戻ることで、最初のシーンをそのまま残そうとしましたが、2 回目の実行でも同じエラーが発生します。
MenuScene の私の実装は次のようになります。
@implementation MenuScene
@synthesize menuLayer = _menuLayer;
- (id)init {
if ((self = [super init])) {
self.menuLayer = [MenuLayer node];
[self addChild:_menuLayer];
}
return self;
}
- (void)dealloc {
[_menuLayer release];
_menuLayer = nil;
[super dealloc];
}
@end