2012-06-11 111 views
2

我想爲某些場景創建繁星點點的天空。 主要的問題是它需要一些時間來填充所有的屏幕與粒子。有人建議我在開始時創造整個天空並將它保存在它的呼叫之間。 我試過這樣的:Cocos2d。 CCLayer的一個例子,有很多場景的粒子?

@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 

但顆粒停止移動。

+0

您的想法是正確的,但是,當它從父項中移除時,Cocos會停止該圖層的計時器。您需要做的是查看調度程序並找到一種方法來恢復定時器或確保它們不會停止。你也可以在科科斯論壇上詢問。 – EmilioPelaez

回答

2

應該工作的一個解決方案是創建星粒子系統並將其添加到您的第一個場景(即主菜單)。將其設置爲不可見或移動到屏幕上或背景圖像(最低z順序)的後面,以便它可以創建一些恆星,而不必在菜單中顯示任何恆星。

現在,當您切換到實際的遊戲場景時,您會分配/ init遊戲場景,然後從當前正在運行的場景中刪除星粒子系統,並將其添加到遊戲場景中。基本上你是從一個場景移動到另一個場景。

現在,您可以使用現在包含已激活的星粒子系統的遊戲場景調用replaceScene。

+0

你的建議幾乎是有用的。更改z順序僅適用。設置可見性無法正常工作。可見= NO的結果是僅當它們變得可見時才生成粒子。你錯過的第二件事是圍繞你的代碼保留/釋放繁星的天空物體(當然,如果你沒有保存兩次) – Gargo