GameScene共享与GameScene节点



我正在将游戏引擎的部分移植到另一个游戏代码中,我有两个问题。

代码:

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

我讲对了吗?

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

当前场景可以通过以下方式从导演处检索:

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

最新更新