GameScene与GameScene节点共享GameScene

时间:2011-12-29 21:08:55

标签: objective-c xcode cocos2d-iphone singleton

我将游戏引擎的一些内容移植到另一个游戏代码中,我有两个问题。

代码:

-(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];

我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:0)

正如hiepnd所说 - 节点方法创建一个新的自动释放实例。但是,移植的代码正在调用单例。我将假设单例是'当前场景' - 因此你的移植任务是找到节点层次结构中的顶级节点 - 确认它确实是类GameScene,然后检索你对bulletCache的引用从它。

可以从导演中检索当前场景,如下所示:

CCScene *currentScene = [[CCDirector sharedDirector] runningScene];
GameScene *gameScene = nil;
if ([currentScene isKindOfClass:[GameScene class]]) gameScene = currentScene;
BulletCache *bulletCache = [gameScene bulletCache];