2012-06-11 4 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

귀하의 아이디어는 맞지만, 코코스는 부모로부터 제거 될 때 레이어의 타이머를 중지합니다. 당신이해야 할 일은 스케줄러를 들여다 보면서 타이머를 복원하거나 멈추지 않는 방법을 찾는 것입니다. 당신은 또한 코코스 포럼에서 주위에 물어볼 수 있습니다. – EmilioPelaez

답변

2

작동해야하는 한 가지 해결책은 스타 입자 시스템을 만들어 첫 번째 장면 (예 : 메인 메뉴)에 추가하는 것입니다. 보이지 않게 설정하거나 화면에서 또는 배경 이미지 (가장 낮은 z 순서) 뒤로 이동하여 메뉴에 별표를 표시하지 않고 별을 만들 수 있습니다.

이제 실제 게임 장면으로 전환하면 게임 장면을 할당/초기화 한 다음 현재 실행중인 장면에서 별 입자 시스템을 제거하고 게임 장면에 추가합니다. 기본적으로 한 장면에서 다른 장면으로 이동하고 있습니다.

이제 이미 활성 별 입자 시스템이 들어있는 게임 장면으로 replaceScene을 호출 할 수 있습니다.

+0

귀하의 조언은 거의 유용합니다. z 순서 변경은 작동합니다. 가시성 설정이 제대로 작동하지 않습니다. visible = NO 결과는 입자가 가시화 될 때 생성됩니다. 두 번째로 놓친 것은 별 하늘 오브젝트의 보유/해제로 코드를 둘러싸는 것입니다 (물론 두 번 저장하지 않았다면) – Gargo