【问题标题】:Cocos2d. One instance of CCLayer with particles for a lot of scenes?Cocos2d。 CCLayer 的一个实例,带有许多场景的粒子?
【发布时间】:2012-06-14 03:22:04
【问题描述】:

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

@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

但粒子停止移动。

【问题讨论】:

  • 您的想法是对的,但是,当图层从其父级中移除时,Cocos 会停止该图层的计时器。您需要做的是查看调度程序并找到一种方法来恢复计时器或确保它们没有停止。也可以在 cocos 论坛上问一问。

标签: iphone ios cocos2d-iphone particles cclayer


【解决方案1】:

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

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

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

【讨论】:

  • 您的建议几乎很有用。仅更改 z 顺序有效。设置可见性无法正常工作。 visible=NO 的结果是粒子仅在它们变得可见时生成。您错过的第二件事是使用保留/释放星空对象围绕您的代码(当然,如果您没有保存两次)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
相关资源
最近更新 更多