總結(jié)下cocos2dx的這些動(dòng)作,知識(shí)大概的總結(jié),不是包含所有。文中的名詞是自己取得。
首先我們要把握主線,我們?cè)赾ocos2dx用到的動(dòng)作都是派生自Action類,而Action又派生自Ref類。而我們主要用到的時(shí)屬于Action派生的FiniteTimeAction(有限時(shí)間的動(dòng)作類)類所派生的類。
FiniteTimeAction中得有限時(shí)間類又分為兩個(gè)部分,一個(gè)部分是瞬時(shí)動(dòng)作類(ActionInstant),也就是執(zhí)行時(shí)你是看不到過程,只能看到結(jié)果。一部分是ActionInterval(持續(xù)動(dòng)作類),這類動(dòng)作都是有持續(xù)時(shí)間的。
1.框架:
Action類派生出:FiniteTimeAction
#FiniteTimeAction類派生出:ActionInstant類和ActionInterval類
##ActionInstant類派生出:CallFunc類、FlipX、Hide、Place(這里只是列出我常用的)
##ActionInterval類派生出:又分為兩大類,一大類是純持續(xù)動(dòng)作類、一大類是動(dòng)作包裝類(這是我自己細(xì)分的)
其中純持續(xù)動(dòng)作類包括:BezierBy(To)(貝茲爾曲線動(dòng)作)、Blink(閃爍動(dòng)作)、FadeIn(Out)、JumpBy(To)(跳轉(zhuǎn)動(dòng)作,指定起跳位置、高度、次數(shù))、RotateBy(To)、ScaleBy(To)(拉伸動(dòng)作)。
其中一般By是相對(duì)的意思當(dāng)前位置或者倍數(shù),To是指定絕對(duì)。第一個(gè)參數(shù)都是指定持續(xù)時(shí)間。
其中動(dòng)作包裝類包括::Repeat、RepeatForever、Sequence、Spawn,動(dòng)作包裝類對(duì)所包裝的動(dòng)作有一定副作用,其副作用一般可顧名思義。
如上,Repeat包裝后的動(dòng)作就是重復(fù)指定次數(shù)被包裝的動(dòng)作、RepeatForever則是持續(xù)不斷、Sequence可以包裝多個(gè)動(dòng)作、其副作用是讓多個(gè)動(dòng)作順序執(zhí)行
Spawn包裝后的動(dòng)作的副作用是,所有動(dòng)作一起執(zhí)行。
2.動(dòng)作的創(chuàng)建:
一般動(dòng)作的創(chuàng)建是調(diào)用相應(yīng)動(dòng)作的類的create工廠方法。
3.動(dòng)作的執(zhí)行:
一般動(dòng)作的是發(fā)送runAction消息給指定的Sprite對(duì)象,傳入?yún)?shù)就是動(dòng)作對(duì)象。
4.幾個(gè)重要?jiǎng)幼鱏equence、Spawn、CallFunc
Sequence動(dòng)作的使用就是如代碼:
auto actions = Sequence::create(action1,action2,...,actionN, NULL);
sprite->runAction(actions);
Spawn的使用也一樣,知識(shí)把關(guān)鍵字替換掉
CallFunc動(dòng)作是我們就稱為回調(diào)動(dòng)作把(或者說是把函數(shù)轉(zhuǎn)化為動(dòng)作),傳入的第二個(gè)函數(shù)指針需要通過callFunc_selector格式化該函數(shù)指針。
auto actionCF= CallFunc::create(this, callFunc_selector(HelloWord::sayLove));