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];      
        }

}

4

2 に答える 2

1

スプライトの削除と一緒に実行されるように、スレッドで「特殊効果」を実行する必要があります。詳細についてはNSThreadを検索してください。ただし、これにより、2つのプロセスを同期できるようになります。

于 2009-06-19T05:20:10.740 に答える
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 で特別なことをする必要はありません (ただし、所有しているため、示されているように解放する必要があります)同じように)。

于 2009-06-19T06:19:33.077 に答える