Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Cocos2d。一个CCLayer的实例,其中包含很多场景的粒子?_Iphone_Ios_Cocos2d Iphone_Particles_Cclayer - Fatal编程技术网

Iphone Cocos2d。一个CCLayer的实例,其中包含很多场景的粒子?

Iphone Cocos2d。一个CCLayer的实例,其中包含很多场景的粒子?,iphone,ios,cocos2d-iphone,particles,cclayer,Iphone,Ios,Cocos2d Iphone,Particles,Cclayer,我想为一些场景创造一个星空。 主要的问题是需要一些时间来填满所有的筛子。有人建议我在一开始就创造整个天空,并在通话之间保存它。 我试过这样的方法: @implementation StarrySky static StarrySky *_starrySky; - (id)init { if ((self = [super init])) { NSArray *starsArray = [NSArray arrayWithObjects:@"Stars1.plist",

我想为一些场景创造一个星空。 主要的问题是需要一些时间来填满所有的筛子。有人建议我在一开始就创造整个天空,并在通话之间保存它。 我试过这样的方法:

@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

但是粒子停止移动。

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

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


现在,您可以使用游戏场景调用ReplaceSecene,该场景现在包含已激活的恒星粒子系统。

您的想法是正确的,但是,Cocos在将层从其父层移除时停止该层的计时器。您需要做的是查看调度程序并找到一种方法来恢复计时器或确保它们没有停止。你也可以在cocos论坛上四处询问。你的建议几乎是有用的。更改z顺序仅起作用。设置可见性无法正常工作。visible=NO的结果是,当粒子仅变为可见时,将生成粒子。你错过的第二件事是用starry sky对象的保留/释放来围绕代码(当然,如果你没有保存两次的话)