게임 루프에 멈추고 자연스럽게 스프라이트를 제거합니다
-
06-07-2019 - |
문제
나는 Cocos2D와 함께 게임을하고 있으며 삭제하고 싶은 스프라이트가 많이 있습니다. 예를 들어 화면에 많은 캐릭터가있을 수 있지만 게임이 끝나면 청소하고 싶습니다. 지금은 산만하게 특수 효과 (입자 시스템)를 만들었지 만 투명하고 층에서 제거 할 때 스프라이트가 사라지는 것을 볼 수있는 모든 화면을 덮지 않기 때문입니다.
또한 지침이 사용자에게 너무 빨리 실행되기 때문에 입자 효과가 시작되기 전에 스프라이트가 사라지는 것처럼 보입니다!
내 두 가지 문제에 대한 제안이 있습니까? 감사.
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];
}
}
해결책
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 객체를 유지하고 호출을 삭제 한 후에까지 살아남을 수 있으므로 ToreMove와 함께 특별한 작업을 수행 할 필요가 없습니다 (소유 한 이후로 표시 해야하는대로 출시 해야하는 경우는 제외됩니다. 또한).
다른 팁
실행되도록 스레드에서 '특수 효과'를 수행해야합니다. 함께 스프라이트가 제거됩니다. 자세한 내용은 NSThread 조회를 사용하면 두 프로세스를 동기화 할 수 있습니다.
제휴하지 않습니다 StackOverflow