ゲームループでストールし、スプライトを自然に削除する
-
06-07-2019 - |
質問
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];
}
}
解決
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で特別なことをする必要がないことに注意してください(以下に示すように、それを解放する必要があることを除きます)あなたもそれを所有しています)。
他のヒント
スレッドで「特別な効果」を実行し、スプライトが削除されると一緒に実行する必要があります。詳細についてはNSThreadを参照してください。ただし、これにより、2つのプロセスを同期できます。
所属していません StackOverflow