我将游戏引擎的一些内容移植到另一个游戏代码中,我有两个问题。
代码:
-(void) checkForBulletCollisions
{
Enemy* enemy;
CCARRAY_FOREACH([batch children], enemy)
{
if (enemy.visible)
{
BulletCache* bulletCache = [[GameScene sharedGameScene] bulletCache];
//etc etc
我正在移植此代码的项目中的GameScene不是像上面代码中的GameScene那样的单例。
这是GameScene的界面代码:
@interface GameScene : CCScene
+(void) newGame:(NSString*)levelFile;
-(void) reloadGame:(NSString*)levelFile;
@end
当移植顶行代码时,我用以下代码代替了顶行代码:
BulletCache* bulletCache = [[GameScene node] bulletCache];
我是在正确的轨道上吗?
答案 0 :(得分:0)
正如hiepnd所说 - 节点方法创建一个新的自动释放实例。但是,移植的代码正在调用单例。我将假设单例是'当前场景' - 因此你的移植任务是找到节点层次结构中的顶级节点 - 确认它确实是类GameScene,然后检索你对bulletCache的引用从它。
可以从导演中检索当前场景,如下所示:
CCScene *currentScene = [[CCDirector sharedDirector] runningScene];
GameScene *gameScene = nil;
if ([currentScene isKindOfClass:[GameScene class]]) gameScene = currentScene;
BulletCache *bulletCache = [gameScene bulletCache];