2009-06-19 3 views
0

저는 cocos2d로 게임을 만들고 있어요. 나는 삭제하고 싶은 스프라이트를 가지고 있습니다. 예를 들어 화면에 여러 개의 문자가있을 수 있지만 게임이 끝나면 정리하고 싶습니다. 지금은 특별한 효과 (파티클 시스템)를 산만 해로 만들었지 만, 투명하고 화면 전체를 볼 수는 없으므로 레이어에서 레이어를 제거 할 때 스프라이트가 사라지는 것을 볼 수 있습니다.게임 루프에서 멈추고 자연스럽게 스프라이트를 제거합니다.

또한 명령이 사용자에게 너무 빨리 실행되기 때문에 입자 효과가 시작되기 전에 스프라이트가 사라지는 것처럼 보입니다!

제 2 문제에 대한 제안 사항이 있습니까? 감사.

NSMutableArray *toRemove = [[NSMutableArray alloc] init]; // array of sprites that I collect to remove 

spriteCount = 0; 
    if([self findAllSprites:parent forRemoval:toRemove] > 0){ // is there is at least one sprite to delete. If not then don't do anything 
     [self specialEffect]; // runs for maybe 3 seconds. 
        // how can I stall here so that the sprites aren't removed "instantaneously"? 
     for (Character* aCharacter in toRemove) { 
      [aCharacter.parent remove:aCharacter];  
     } 

}

당신이 함께 스프라이트 제거를 실행되도록 스레드에서 '특수 효과'를 할 필요가

답변

1

performSelector : withObject : afterDelay :를 사용하여 제거 동작을 지연시킬 수 있습니다. 예를 들면 :

NSMutableArray *toRemove = [[NSMutableArray alloc] init]; // array of sprites that I collect to remove 
    spriteCount = 0; 
    if([self findAllSprites:parent forRemoval:toRemove] > 0){ // is there is at least one sprite to delete. If not then don't do anything 
     [self specialEffect]; // runs for maybe 3 seconds. 
     [self performSelector:@selector(removeSprites:) withObject: toRemove afterDelay:1.0]; 
    } 
    [toRemove release]; 

- (void) removeSprites: (NSArray*) toRemove 
{ 
    for (Character* aCharacter in toRemove) { 
     [aCharacter.parent remove:aCharacter];   
    } 
} 

참고 performSelector : withObject : afterDelay 다음 toRemove 객체를 유지하고 removeSprites를 호출 할 때까지 당신이 toRemove에 특별한 아무것도 할 필요가 없습니다 아직도 것을 제외하고 (살아 그것을 유지합니다 당신이 소유하고 있기 때문에 그것을 보여줄 필요가 있습니다).

+0

감사합니다. 그것은 훌륭하게 작동했습니다. – Stu

1

. 자세한 내용은 NSThread를 조회하되 두 프로세스를 동기화 할 수 있습니다.

관련 문제