cocos2dを使ってゲームを作っています。ゲーム作成時に呼び出されるメソッドは次のとおりです。
- (void)createGame
{
GameScene *newScene = [[GameScene alloc] initWithController:self]; //subclass of CCScene
if ([CCDirector sharedDirector].runningScene)
[[CCDirector sharedDirector] replaceScene:newScene];
else
[[CCDirector sharedDirector] pushScene:newScene];
scene = newScene;
//some controllers for some layers of my scene
box2d = [[Box2DController alloc] initWithParent:self];
menu = [[MenuController alloc] initWithParent:self];
controls = ([[ControlsController alloc] initWithParent:self]);
self.controllers = [[NSArray alloc] initWithObjects:box2d, menu, controls, nil];
//some object, contains some parameters. rizeEvent tells about some event to all controllers. In this case, it sends pointer to worldState to all of them.
worldState = [[WorldState alloc] init];
EventArgs *eventArgs1 = [[EventArgs alloc] initWithSender:self params:worldState];
[self riseEvent:@"WorldStateUpdate" withArgs:eventArgs1];
}
私の世界を破壊し、新しいものを作成するボタンがあります:
- (void)onExitPressedWithArgs:(EventArgs *)e
{
[self destroyGame];
[self createGame];
}
'destroyGame'メソッドは次のとおりです。
- (void)destroyGame
{
[box2d release];
[menu release];
[controls release];
[scene release];
[worldState release];
box2d = nil;
menu = nil;
controls = nil;
scene = nil;
worldState = nil;
[self.controllers release];
self.controllers = nil;
}
だから、私は自分のアプリケーションを起動しています:
- 「createGame」と呼ばれる
- 「再起動」ボタンを押す
- 「onExitPressedWithArgs」と呼ばれる
- 「destroyGame」と「createGame」は呼ばれます
- 新しい世界が創造され、すべてがうまくいく
- 「再起動」ボタンを押すと、「onExitPressedWithArgs」が呼び出され、「destroyGame」と「createGame」が呼び出されます
- アプリケーションがクラッシュします。
常にcadeのさまざまな部分でクラッシュしますが、常に「EXC_BAD_ACCESS」例外が発生します。