iOS開(kāi)發(fā)篇——cocos2d-x瞬時(shí)動(dòng)作延時(shí)動(dòng)作-創(chuàng)新互聯(lián)

藍(lán)鷗iOS培訓(xùn)講師推薦:本節(jié)內(nèi)容是cocos2dx必備知識(shí),相對(duì)來(lái)說(shuō)也比較基礎(chǔ)的:瞬時(shí)動(dòng)作和延時(shí)動(dòng)作。接下來(lái)具體講解一下!

創(chuàng)新互聯(lián)建站于2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元滿洲做網(wǎng)站,已為上家服務(wù),為滿洲各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

一、動(dòng)作

可以說(shuō)動(dòng)作構(gòu)成了cocos2dx的精華(看一下動(dòng)作類有多少子類就知道了)

動(dòng)作(指令),指令由節(jié)點(diǎn)執(zhí)行,那么這個(gè)節(jié)點(diǎn)在執(zhí)行動(dòng)作的時(shí)候,他的所有子節(jié)點(diǎn)也跟著執(zhí)行,這個(gè)特性是非常重要/有用的。

執(zhí)行動(dòng)作的代碼非常簡(jiǎn)單,先生成,然后讓節(jié)點(diǎn)執(zhí)行,程序如下:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

CCAction及其子類的繼承樹非常龐大,這里要逐一介紹了。CCAction及其子類簡(jiǎn)圖:

二、CCActionInstant家族(立即動(dòng)作)

就是動(dòng)作不用時(shí)間,立刻馬上守成。那么立即動(dòng)作的共同基類分為:CCActionInstant。CCActionInstant的常用子類有:

1、CCFlipX:X軸翻轉(zhuǎn)、CCFlipY:Y軸翻轉(zhuǎn)

2、CCHide:隱藏、CCShow:顯示、CCToggleVisibility:切換可視性

3、CCPlace:放置到一個(gè)位置

4、CCCallFunc家族:回調(diào)函數(shù)包裝器

三、CCCallFunc家族(回調(diào)函數(shù)包裝器)

CCCallFunc是CCActionInstant的子類,是非常重要的一個(gè)類族(就是適配器)。用大白話說(shuō),就是做了一層包裝,把函數(shù)包裝成動(dòng)作,這樣你在執(zhí)行動(dòng)作的時(shí)候,就可以執(zhí)行函數(shù)了。

玩家死亡動(dòng)畫(也是個(gè)動(dòng)作)播放完成后,結(jié)束游戲,程序如下:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

//回調(diào)函數(shù)的定義:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

要說(shuō)的重點(diǎn)是:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

cocos2dx中,一般對(duì)象都是采用靜態(tài)方法生成的,函數(shù)簽名如下:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

pSelectorTarget是指這個(gè)函數(shù)的執(zhí)行對(duì)象,這點(diǎn)不要和動(dòng)作的執(zhí)行節(jié)點(diǎn)弄混了,是不一樣的,它們兩個(gè)是不是一個(gè)都行。例如,我用的是this,那么動(dòng)作的執(zhí)行節(jié)點(diǎn)和函數(shù)的執(zhí)行對(duì)象就是同一個(gè)。

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

上面是CCCallFunc::execute()的源碼,m_pSelectorTarget就是之前在簽名里綁定的pSelectorTarget,而該動(dòng)作的執(zhí)行節(jié)點(diǎn)則是另外一個(gè)變量m_pTarget

四、使用CCCallFunc家族的類

CCCallFunc家族一共有四個(gè)類。這是四個(gè)類對(duì)象的靜態(tài)生成函數(shù):

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

那么在寫的時(shí)候,就直接用這四個(gè)生成相關(guān)的動(dòng)作對(duì)象,然后讓節(jié)點(diǎn)執(zhí)行就行。

但是大家一定要注意這四個(gè)類,分別對(duì)應(yīng)的是四種不同的函數(shù)接口,也可說(shuō)成是他包裝了四種不一樣的回調(diào)函數(shù)。這四個(gè)回調(diào)函數(shù)的不一樣,主要是因?yàn)閰?shù)表的不一樣。下面是四個(gè)回調(diào)函數(shù)的型定義,看一下:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

這四個(gè)玩意要解釋清楚比較麻煩,這是用typedef定義了類成員函數(shù)指針。如果你對(duì)C++不熟悉,你不需要搞懂具體什么意思,但你必須保證你的函數(shù)簽名和這四個(gè)其中之一一致。

意思就是自己寫的回調(diào)函數(shù)簽名,看起來(lái)像這樣:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

你可以在回調(diào)函數(shù)里操作這些被傳進(jìn)來(lái)的參數(shù)。

除此之外,在用靜態(tài)函數(shù)生成動(dòng)作的時(shí)候,要用一個(gè)宏,幫助轉(zhuǎn)換函數(shù)指針類型,上面那個(gè)callfunc_selector,因?yàn)橛兴姆N類型的回調(diào)函數(shù),所以也就有四個(gè)類型轉(zhuǎn)換宏

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

最后出來(lái)的的程序應(yīng)該是:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

五、CCActionInterval家族(持續(xù)動(dòng)作)

就是該動(dòng)作的執(zhí)行將持續(xù)一段時(shí)間。因此持續(xù)動(dòng)作的靜態(tài)生成函數(shù),往往附帶一個(gè)時(shí)間值Duration。如下:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

持續(xù)動(dòng)作類名后綴:分為To和By。To表示最終達(dá)到的目標(biāo)值,By表示增量值。如:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

持續(xù)動(dòng)作比立即動(dòng)作的數(shù)量要多很多,常用的CCActionInterval子類動(dòng)作有,簡(jiǎn)單的表現(xiàn):

1、CCMoveTo:移動(dòng)到、CCMoveBy:按……移動(dòng)

2、CCJumpTo:跳躍到、CCJumpBy:按……跳躍

3、CCBezierTo:貝茲移動(dòng)到、CCBezierBy:按……貝茲移動(dòng)

4、CCRotateTo:旋轉(zhuǎn)到、CCRotateBy:按……旋轉(zhuǎn)
5、CCScaleTo:縮放到、CCScaleBy:按……縮放
6、CCSkewTo:切變到、CCSkewBy:按……切變

7、CCTintTo:顏色漸變到、CCTintBy:按……顏色漸變

8、CCFadeIn:從無(wú)到有,也叫淡入、CCFadeOut:從有到無(wú),也叫淡出、CCFadeTo:改變不透明度到某個(gè)值

9、CCBlink:閃耀

10、CCDelayTime:延時(shí)復(fù)雜一點(diǎn)的:

1、CCAnimate:幀動(dòng)畫,這個(gè)我們?cè)诘谒墓?jié)講過(guò),關(guān)于動(dòng)畫的問(wèn)題不是一句兩句就能說(shuō)完,以后會(huì)慢慢展開(kāi)

2、CCGridAction家族:網(wǎng)格動(dòng)畫

3、包裝器:CCRepeat:重復(fù)執(zhí)行幾次、CCRepeatForever:永遠(yuǎn)執(zhí)行、CCSequence:按序列執(zhí)行、CCSpawn:同時(shí)執(zhí)行、CCActionEase家族:補(bǔ)間動(dòng)畫

六、簡(jiǎn)單的持續(xù)動(dòng)作

這些動(dòng)作都非常簡(jiǎn)單,和立即動(dòng)作的區(qū)別只是增加了一個(gè)執(zhí)行時(shí)間而已。但還有一些要注意的地方:

1、旋轉(zhuǎn)動(dòng)作順時(shí)針是正方向

2、關(guān)于貝茲曲線

貝茲曲線的描述結(jié)構(gòu)體如下:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

如果執(zhí)行節(jié)點(diǎn)是this的話,那么對(duì)應(yīng)個(gè)點(diǎn)的位置如圖。

注意,當(dāng)使用CCBezierTo時(shí),ccBezierConfig的點(diǎn)都是絕對(duì)坐標(biāo)點(diǎn)。但如果使用CCBezierBy,ccBezierConfig的點(diǎn)都是相對(duì)坐標(biāo)點(diǎn)。這點(diǎn)要謹(jǐn)記。

七、一些包裝器

這些動(dòng)作單獨(dú)無(wú)法起作用,需要包裝其他動(dòng)作類才行。他們的作用是對(duì)于動(dòng)作的執(zhí)行,增加一些變化。和裝飾者模式相相近,看起來(lái)一樣。

1、CCRepeat:用于重復(fù)執(zhí)行幾次動(dòng)作,times表示執(zhí)行次數(shù)

staticCCRepeat*CCRepeat::actionWithAction(CCFiniteTimeAction*pAction,unsignedinttimes)

使用舉例:在我的例子中,用到如下寫法,我播放一個(gè)詐彈動(dòng)畫若干次,然后啟動(dòng)爆炸的相關(guān)代碼。

CCFiniteTimeAction*action=getAnimate();//獲得詐彈播放動(dòng)畫,自己實(shí)現(xiàn)的函數(shù)

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

2.CCRepeatForever:永遠(yuǎn)執(zhí)行一個(gè)動(dòng)作

staticCCRepeatForever*CCRepeatForever::actionWithAction(CCActionInterval*pAction)

如:一個(gè)精靈我只會(huì)改變他的位置,但是不需要改變他的動(dòng)畫,那么就可以使用這個(gè)來(lái)保持這個(gè)動(dòng)畫一直運(yùn)行,代碼如下:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

3.CCSequence:按序列執(zhí)行動(dòng)作,這會(huì)讓節(jié)點(diǎn)連續(xù)執(zhí)行幾個(gè)動(dòng)作。

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

例如:執(zhí)行一個(gè)動(dòng)作,然后回調(diào)。比如主角行走一個(gè)格子后,切換為站立狀態(tài)。代碼如下:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

但是大家一定要注意,最后要使用NULL結(jié)尾。表示傳參結(jié)束。我不明白為什么非要強(qiáng)制加NULL,按道理說(shuō)C++不定參數(shù)表,可以不用NULL的??丛创?/p>

碼才發(fā)現(xiàn),里面用到了真值判斷刷循環(huán)。

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

4.CCSpawn:同時(shí)執(zhí)行幾個(gè)動(dòng)作,最終動(dòng)作的持續(xù)時(shí)間,由時(shí)間最長(zhǎng)的那個(gè)動(dòng)作確定。

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

例如:可以用CCSpacwn來(lái)做翻跟頭的動(dòng)畫,只需要組合moveTo和RotateBy。Test中有這個(gè)代碼:

iOS開(kāi)發(fā)篇——cocos2d-x 瞬時(shí)動(dòng)作延時(shí)動(dòng)作

八、fan動(dòng)作

fan動(dòng)作是使用一個(gè)接口實(shí)現(xiàn)的,該接口直接返回一個(gè)此動(dòng)作的fan動(dòng)作。

virtualCCFiniteTimeAction*reverse(void)

例如:fan動(dòng)作很容易造出一個(gè)動(dòng)作循環(huán)來(lái),在Test中有這個(gè)代碼,大家可以參考一下:

CCActionInterval*jump=CCJumpBy::actionWithDuration(2,CCPointMake(300,0),50,4);
CCFiniteTimeAction*action=CCSequence::actions(jump,jump->reverse(),NULL);
m_grossini->runAction(action);

是不是感覺(jué)好復(fù)雜??!其實(shí)學(xué)起來(lái)一點(diǎn)都不復(fù)雜,是比較基礎(chǔ)的,相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,只要有基礎(chǔ)就更不是問(wèn)題了。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享名稱:iOS開(kāi)發(fā)篇——cocos2d-x瞬時(shí)動(dòng)作延時(shí)動(dòng)作-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://www.muchs.cn/article8/cdeoop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站設(shè)計(jì)服務(wù)器托管、定制開(kāi)發(fā)網(wǎng)站改版、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)