加载完成后替换场景

时间:2011-07-17 17:30:35

标签: iphone cocos2d-iphone scene

我是cocos2d和Objective C的新手,做了一些初步的步骤,并且遇到了我无法击败的问题。我有2个场景,第一个加载一些文件,比加载后我想切换到主场景,但根本不能这样做。我已经制作了加载元素的进度条,我想在加载完成后转到下一个场景。但它不会取代场景而只是退出应用程序。这是PreloaderScene的部分代码:

    +(id) scene
{
    CCScene *scene = [CCScene node];
    CCLayer* layer = [PreloaderScene node];
    [scene addChild:layer];
    return scene;
}

- (id) init
{
        if ((self = [super init]))
        {


            int n=5;

            CCLabelTTF *label = [CCLabelTTF labelWithString:@"Loading..." fontName:@"Marker Felt" fontSize:64];
            CGSize size = [[CCDirector sharedDirector] winSize];
            label.position =  ccp( size.width /2 , size.height/2 );
            [self addChild: label];

            CCSprite *Bar = [CCSprite spriteWithFile:@"200x30.png"];
            Bar.position = ccp(size.width /2 , size.height/2-70);
            [self addChild:Bar];
            CCSprite *Progress = [CCSprite spriteWithFile:@"2x30.png"];
            Progress.position = ccp (size.width/2-100+1, size.height/2-70);
            [self addChild:Progress];

            ResourceManager *Resource = [[ResourceManager alloc] init];
            for (int i=1;i<=n;i++)
            {
                NSString *imageName =[NSString stringWithFormat:@"image%d.png",i];
                [Resource LoadImage:imageName];

                [Progress runAction:[CCMoveTo actionWithDuration:1 position:ccp (size.width/2-100+i/n*100, size.height/2-70)]];
                [Progress runAction:[CCScaleBy actionWithDuration:1 scaleX:i/n*100 scaleY:1]];
            }
            [[CCDirector sharedDirector] replaceScene:MainScene];   
        }
        return self;

}

2 个答案:

答案 0 :(得分:0)

我没有看到您在哪里创建MainScene以便能够将其用于替换。这可能是问题吗? 也许您需要像以下

一样创建它
 MainScene *scene = [MainScene node];
[[CCDirector sharedDirector] replaceScene:scene];

在使用它之前,您需要实际创建主体。

答案 1 :(得分:0)

我也是Cocos2D的新手,但据我所知,我找到了你的答案

  1. 一个原因是您在使用之前未创建Main Scene
  2. 你不能在另一个Scene的init方法中调用replaceScene。这会导致 CCDirector崩溃....