私のコードでは、シーンの変更を担当するメソッドを持つ GameManager シングルトンを作成しました。最初に呼び出すシーンは MenuScene で、その後は GameScene に置き換えます。これを行うと、コンソール出力に次のように表示されます。
2013-10-07 19:40:55.895 MyGame[56164:a0b] -[MenuScene distance]: unrecognized selector sent to instance 0xb460690
2013-10-07 19:40:56.011 MyGame[56164:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MenuScene distance]: unrecognized selector sent to instance 0xb460690'
ログから、-[MenuScene distance] ...
距離は MenuScene ではなく GameScene のプロパティであるため、取得する理由がわかりません。
以下は、シーンを変更するための GameManager メソッドです。
-(void)runSceneWithID:(SceneTypes)sceneID {
SceneTypes oldScene = currentScene;
currentScene = sceneID;
//NSString* str;
id sceneToRun = nil;
switch (sceneID)
{
case kBeginScene:
sceneToRun = [BeginScene node];
break;
case kGameScene:
sceneToRun = [GameScene node];
break;
case kMenuScene:
sceneToRun = [MenuScene node];
break;
default:
CCLOG(@"Unknown ID, cannot switch scenes");
return;
break;
}
if (sceneToRun == nil) {
// Revert back, since no new scene was found
currentScene = oldScene;
return;
}
if ([[CCDirector sharedDirector] runningScene] == nil) {
[[CCDirector sharedDirector] runWithScene:sceneToRun];
} else {
[[CCDirector sharedDirector] replaceScene:sceneToRun];
}
}
また、シーンを置き換える呼び出しは、MenuScene の一部であるレイヤー クラスにあります。下記参照:
-(void)startGameScene {
[[GameManager sharedGameManager] runSceneWithID:kGameScene];
}
助けてください。