正文

基 礎(chǔ) 知 識(shí)(9)

iPhone & iPad Cocos2D游戲開發(fā)實(shí)戰(zhàn) 作者:(美)伊特海姆


  

接下來要討論的是,如何使這些被調(diào)度的方法不再被調(diào)用??梢酝ㄟ^取消調(diào)度做到這一點(diǎn)。

要使節(jié)點(diǎn)中所有用選擇器選定的方法(包括使用scheduleUpdate指定的方法)停止,可使用:

 

[self unscheduleAllSelectors];

 

要使某個(gè)用特定選擇器選定的方法停止(假設(shè)選擇器名為“updateTenTimesPerSecond:”),可使用:

 

[self unschedule:@selector(updateTenTimesPerSecond:)];

 

注意,該做法不會(huì)令使用scheduleUpdate指定的更新方法停止。

關(guān)于如何使用選擇器來進(jìn)行調(diào)度或者取消調(diào)度,這里有一個(gè)很有用的小竅門。很多時(shí)候,可能需要在一個(gè)被調(diào)度的方法中取消對(duì)某個(gè)方法的調(diào)用,但是因?yàn)樽远x方法可能會(huì)被改名,所以不想在這里重復(fù)具體的方法名和參數(shù)個(gè)數(shù)。下面演示如何用選擇器對(duì)一個(gè)方法進(jìn)行調(diào)度,并在第一次調(diào)用后取消調(diào)度:

 

-(void) scheduleUpdates

{

    [self schedule:@selector(tenMinutesElapsed:) interval:600];

}

 

-(void) tenMinutesElapsed:(ccTime)delta

{

    // unschedule the current method by using the _cmd keyword

    [selfunschedule:_cmd];

}

此處的關(guān)鍵字_cmd是當(dāng)前方法的快捷表達(dá)方式。這種方法可以有效地使tenMinutesElapsed方法不再被調(diào)用。事實(shí)上,也可以用_cmd來執(zhí)行調(diào)度。假設(shè)現(xiàn)有一個(gè)方法,你需要以不同的時(shí)間間隔調(diào)用它,那么可以使用如下代碼來完成:

 

-(void) scheduleUpdates

{

// schedule the first update as usual

[self schedule:@selector(irregularUpdate:) interval:1];

}

 

-(void) irregularUpdate:(ccTime)delta

{

// unschedule the method first

[self unschedule:_cmd];

 

// I assume you’d have some kind of logic other than random to determine

// the next time the method should be called

float nextUpdate = CCRANDOM_0_1() * 10;

 

// then re-schedule it with the new interval using _cmd as the selector

[self schedule:_cmdinterval:nextUpdate];

}


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)