藍鷗iOS培訓講師推薦:本節內容是cocos2dx必備知識,相對來說也比較基礎的:瞬時動作和延時動作。接下來具體講解一下!
創新互聯建站于2013年開始,是專業互聯網技術服務公司,擁有項目網站設計、做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元滿洲做網站,已為上家服務,為滿洲各地企業和個人服務,聯系電話:18982081108一、動作
可以說動作構成了cocos2dx的精華(看一下動作類有多少子類就知道了)
動作(指令),指令由節點執行,那么這個節點在執行動作的時候,他的所有子節點也跟著執行,這個特性是非常重要/有用的。
執行動作的代碼非常簡單,先生成,然后讓節點執行,程序如下:
CCAction及其子類的繼承樹非常龐大,這里要逐一介紹了。CCAction及其子類簡圖:
二、CCActionInstant家族(立即動作)
就是動作不用時間,立刻馬上守成。那么立即動作的共同基類分為:CCActionInstant。CCActionInstant的常用子類有:
1、CCFlipX:X軸翻轉、CCFlipY:Y軸翻轉
2、CCHide:隱藏、CCShow:顯示、CCToggleVisibility:切換可視性
3、CCPlace:放置到一個位置
4、CCCallFunc家族:回調函數包裝器
三、CCCallFunc家族(回調函數包裝器)
CCCallFunc是CCActionInstant的子類,是非常重要的一個類族(就是適配器)。用大白話說,就是做了一層包裝,把函數包裝成動作,這樣你在執行動作的時候,就可以執行函數了。
玩家死亡動畫(也是個動作)播放完成后,結束游戲,程序如下:
//回調函數的定義:
要說的重點是:
cocos2dx中,一般對象都是采用靜態方法生成的,函數簽名如下:
pSelectorTarget是指這個函數的執行對象,這點不要和動作的執行節點弄混了,是不一樣的,它們兩個是不是一個都行。例如,我用的是this,那么動作的執行節點和函數的執行對象就是同一個。
上面是CCCallFunc::execute()的源碼,m_pSelectorTarget就是之前在簽名里綁定的pSelectorTarget,而該動作的執行節點則是另外一個變量m_pTarget
四、使用CCCallFunc家族的類
CCCallFunc家族一共有四個類。這是四個類對象的靜態生成函數:
那么在寫的時候,就直接用這四個生成相關的動作對象,然后讓節點執行就行。
但是大家一定要注意這四個類,分別對應的是四種不同的函數接口,也可說成是他包裝了四種不一樣的回調函數。這四個回調函數的不一樣,主要是因為參數表的不一樣。下面是四個回調函數的型定義,看一下:
這四個玩意要解釋清楚比較麻煩,這是用typedef定義了類成員函數指針。如果你對C++不熟悉,你不需要搞懂具體什么意思,但你必須保證你的函數簽名和這四個其中之一一致。
意思就是自己寫的回調函數簽名,看起來像這樣:
你可以在回調函數里操作這些被傳進來的參數。
除此之外,在用靜態函數生成動作的時候,要用一個宏,幫助轉換函數指針類型,上面那個callfunc_selector,因為有四種類型的回調函數,所以也就有四個類型轉換宏
最后出來的的程序應該是:
五、CCActionInterval家族(持續動作)
就是該動作的執行將持續一段時間。因此持續動作的靜態生成函數,往往附帶一個時間值Duration。如下:
持續動作類名后綴:分為To和By。To表示最終達到的目標值,By表示增量值。如:
持續動作比立即動作的數量要多很多,常用的CCActionInterval子類動作有,簡單的表現:
1、CCMoveTo:移動到、CCMoveBy:按……移動
2、CCJumpTo:跳躍到、CCJumpBy:按……跳躍
3、CCBezierTo:貝茲移動到、CCBezierBy:按……貝茲移動
4、CCRotateTo:旋轉到、CCRotateBy:按……旋轉
5、CCScaleTo:縮放到、CCScaleBy:按……縮放
6、CCSkewTo:切變到、CCSkewBy:按……切變
7、CCTintTo:顏色漸變到、CCTintBy:按……顏色漸變
8、CCFadeIn:從無到有,也叫淡入、CCFadeOut:從有到無,也叫淡出、CCFadeTo:改變不透明度到某個值
9、CCBlink:閃耀
10、CCDelayTime:延時復雜一點的:
1、CCAnimate:幀動畫,這個我們在第四節講過,關于動畫的問題不是一句兩句就能說完,以后會慢慢展開
2、CCGridAction家族:網格動畫
3、包裝器:CCRepeat:重復執行幾次、CCRepeatForever:永遠執行、CCSequence:按序列執行、CCSpawn:同時執行、CCActionEase家族:補間動畫
六、簡單的持續動作
這些動作都非常簡單,和立即動作的區別只是增加了一個執行時間而已。但還有一些要注意的地方:
1、旋轉動作順時針是正方向
2、關于貝茲曲線
貝茲曲線的描述結構體如下:
如果執行節點是this的話,那么對應個點的位置如圖。
注意,當使用CCBezierTo時,ccBezierConfig的點都是絕對坐標點。但如果使用CCBezierBy,ccBezierConfig的點都是相對坐標點。這點要謹記。
七、一些包裝器
這些動作單獨無法起作用,需要包裝其他動作類才行。他們的作用是對于動作的執行,增加一些變化。和裝飾者模式相相近,看起來一樣。
1、CCRepeat:用于重復執行幾次動作,times表示執行次數
staticCCRepeat*CCRepeat::actionWithAction(CCFiniteTimeAction*pAction,unsignedinttimes)
使用舉例:在我的例子中,用到如下寫法,我播放一個詐彈動畫若干次,然后啟動爆炸的相關代碼。
CCFiniteTimeAction*action=getAnimate();//獲得詐彈播放動畫,自己實現的函數
2.CCRepeatForever:永遠執行一個動作
staticCCRepeatForever*CCRepeatForever::actionWithAction(CCActionInterval*pAction)
如:一個精靈我只會改變他的位置,但是不需要改變他的動畫,那么就可以使用這個來保持這個動畫一直運行,代碼如下:
3.CCSequence:按序列執行動作,這會讓節點連續執行幾個動作。
例如:執行一個動作,然后回調。比如主角行走一個格子后,切換為站立狀態。代碼如下:
但是大家一定要注意,最后要使用NULL結尾。表示傳參結束。我不明白為什么非要強制加NULL,按道理說C++不定參數表,可以不用NULL的。看源代
碼才發現,里面用到了真值判斷刷循環。
4.CCSpawn:同時執行幾個動作,最終動作的持續時間,由時間最長的那個動作確定。
例如:可以用CCSpacwn來做翻跟頭的動畫,只需要組合moveTo和RotateBy。Test中有這個代碼:
八、fan動作
fan動作是使用一個接口實現的,該接口直接返回一個此動作的fan動作。
virtualCCFiniteTimeAction*reverse(void)
例如:fan動作很容易造出一個動作循環來,在Test中有這個代碼,大家可以參考一下:
CCActionInterval*jump=CCJumpBy::actionWithDuration(2,CCPointMake(300,0),50,4);
CCFiniteTimeAction*action=CCSequence::actions(jump,jump->reverse(),NULL);
m_grossini->runAction(action);
是不是感覺好復雜啊!其實學起來一點都不復雜,是比較基礎的,相對來說比較簡單,只要有基礎就更不是問題了。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享名稱:iOS開發篇——cocos2d-x瞬時動作延時動作-創新互聯
標題鏈接:http://vcdvsql.cn/article8/cdeoop.html
成都網站建設公司_創新互聯,為您提供網站收錄、網站設計、服務器托管、定制開發、網站改版、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯