正文

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

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


  

3.5.3  消息調(diào)度

節(jié)點(diǎn)可以對(duì)消息進(jìn)行調(diào)度,其實(shí)就是指Objective-C中每隔一段時(shí)間調(diào)用一次方法。很多情況下,你可能想對(duì)一個(gè)節(jié)點(diǎn)采用特定的更新方法來(lái)進(jìn)行某個(gè)操作,例如碰撞檢測(cè)。要使特定的更新方法以每幀的頻率被調(diào)用一次,最簡(jiǎn)單的做法如下所示:

-(void) scheduleUpdates

{

[selfscheduleUpdate];

}

-(void) update:(ccTime)delta

{

// this method is called every frame

}

非常簡(jiǎn)單吧?注意,更新方法是有固定格式的,也就是說(shuō),它永遠(yuǎn)是像示例代碼這樣定義的。參數(shù)delta代表了該函數(shù)自上次被調(diào)用到現(xiàn)在所經(jīng)過(guò)的時(shí)間。如果希望每幀調(diào)用一次更新方法,以上示例是一個(gè)比較好的做法。但是如果想要有更的靈活性,最好還是采用其他更新方法。

如果想調(diào)用另一個(gè)方法,或者不想以每幀的頻率(而是以每0.1秒的頻率)調(diào)用該方法,就應(yīng)該采用以下做法:

-(void) scheduleUpdates

{

[self schedule:@selector(updateTenTimesPerSecond:)interval:0.1f];

}

-(void) updateTenTimesPerSecond:(ccTime)delta

{

// this method is called according to its interval, ten times per second

}

注意,如果interval的值為0,還是應(yīng)該用scheduleUpdate方法。但是,假如你之后需要取消對(duì)一個(gè)定時(shí)方法的調(diào)用,最好還是采取上面的做法,因?yàn)閟cheduleUpdate方法做不到這一點(diǎn)。

這里的更新方法在格式上和原來(lái)一樣,還是只有一個(gè)參數(shù)“delta”。與之前有所不同的是,該更新方法的名稱(chēng)可以根據(jù)你的喜好來(lái)修改,而且它以0.1秒的頻率被調(diào)用。例如,當(dāng)游戲邏輯復(fù)雜到你不想以每幀的頻率去檢測(cè)玩家是否勝出時(shí),就可以采用這種做法。假如希望在10分鐘后調(diào)用某方法,可以用選擇器選定你的更新方法,并把interval設(shè)定為600。


上一章目錄下一章

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