المماطلة في حلقة لعبة وإزالة العفاريت بشكل طبيعي

StackOverflow https://stackoverflow.com/questions/1016427

سؤال

وأنا صنع لعبة مع 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 لمزيد من المعلومات، ولكن هذا سوف تمكنك من مزامنة العمليتين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top