2

我想为一些场景创造一个星空。主要问题是需要一些时间才能用粒子填充所有屏幕。有人建议我在开始时创建整个天空并在调用之间保存它。我试过这样的事情:

@implementation StarrySky

static StarrySky *_starrySky;

- (id)init
{
    if ((self = [super init])) {
        NSArray *starsArray = [NSArray arrayWithObjects:@"Stars1.plist", @"Stars2.plist", @"Stars3.plist", nil];
        for(NSString *stars in starsArray) {        
            CCParticleSystemQuad *starsEffect = [CCParticleSystemQuad particleWithFile:stars];        
            [self addChild:starsEffect z:-2];
        }
    }
    return self;
}

+ (StarrySky *)sharedStarrySky
{
    if (!_starrySky) {
        _starrySky = [[StarrySky alloc] init];
    }
    return _starrySky;
}

- (void)dealloc
{
    _starrySky = nil;
    [super dealloc];
}

@end

但是粒子停止移动。

4

1 回答 1

2

一个应该可行的解决方案是创建星形粒子系统并将其添加到您的第一个场景(即主菜单)。将其设置为不可见或将其移出屏幕或在背景图像后面(最低 z 顺序),以便它可以创建一些星星而不实际在菜单中显示任何星星。

现在,当您切换到实际游戏场景时,您分配/初始化游戏场景,然后从当前运行的场景中移除星形粒子系统并将其添加到游戏场景中。基本上你是把它从一个场景移动到另一个场景。

现在您可以调用 replaceScene 与现在包含已经激活的星粒子系统的游戏场景。

于 2012-06-11T10:22:35.790 回答