前情回顧
上一篇潘拱,我們簡(jiǎn)單介紹了如何創(chuàng)建一個(gè)自己的場(chǎng)景,但是所有的場(chǎng)景都是靜態(tài)的拧略。而今天呢芦岂,我們的目標(biāo)就是創(chuàng)建一個(gè)會(huì)動(dòng)的充滿生機(jī)的場(chǎng)景。(順便也復(fù)習(xí)一下如何創(chuàng)建一個(gè)游戲場(chǎng)景垫蛆,上一篇的內(nèi)容咯禽最!:))
創(chuàng)建一個(gè)場(chǎng)景
還是老套的步驟,我們先創(chuàng)建一個(gè)對(duì)應(yīng)的場(chǎng)景類袱饭,這次我們叫做MoveScene
川无,來(lái)表示它是個(gè)會(huì)動(dòng)的場(chǎng)景吧。
首先在VS中添加對(duì)應(yīng)的文件虑乖,一個(gè)頭文件和一個(gè).cpp文件懦趋,大致看一下頭文件的內(nèi)容:
創(chuàng)建一個(gè)場(chǎng)景對(duì)應(yīng)的那三個(gè)函數(shù),init()
, createScene()
, CREATE_FUNC
,和前面一篇將的類似疹味。
其中createScene()
函數(shù)還是一樣的代碼仅叫,創(chuàng)建一個(gè)場(chǎng)景,接著創(chuàng)建一個(gè)層(Layer)糙捺,然后將Layer加入到場(chǎng)景中诫咱,返回對(duì)應(yīng)的場(chǎng)景。所有的內(nèi)容都在init()
函數(shù)中洪灯。下面遂跟,就著重介紹init()
函數(shù)。
實(shí)現(xiàn)一個(gè)會(huì)跳的精靈
init()
函數(shù)中主要有兩個(gè)大功能婴渡,一個(gè)是跟隨鼠標(biāo)移動(dòng)的精靈馋记,這個(gè)是用來(lái)展示cocos2d-x中事件處理的贵涵,還有一個(gè)是會(huì)不停跳動(dòng)的精靈,此是用來(lái)展示cocos2d-x中的動(dòng)作類。
先來(lái)著重介紹動(dòng)作類吧墙歪!
在init函數(shù)中添加如下代碼:
mJumpSprite = Sprite::create("Monster.png"); // 創(chuàng)建一個(gè)精靈類
mJumpSprite->setPosition(200.0f, 200.0f); // 設(shè)置它的位置
this->addChild(mJumpSprite); // 放到場(chǎng)景中
這些代碼為我們創(chuàng)建了一個(gè)精靈怠堪。要展示動(dòng)作類弛饭,那么你必然要有一個(gè)精靈吧!
接下來(lái)就是創(chuàng)建動(dòng)作類了:
先來(lái)一個(gè)簡(jiǎn)單的吧
auto moveUp = MoveBy::create(0.5f, Vec2(0, 50));
mJumpSprite->runAction(moveUp);
在init()
中添加這些代碼富拗,編譯,運(yùn)行鸣戴,你就會(huì)看到效果:
紫色的小精靈在0.5秒內(nèi)向上移動(dòng)了50個(gè)單位啃沪。
‘那么怎么實(shí)現(xiàn)上下跳動(dòng)呢?上下跳動(dòng)我可以理解為想往上跳窄锅,然后再往下跳创千,如此重復(fù)。要實(shí)現(xiàn)這個(gè)效果入偷,我就需要考慮組合兩個(gè)動(dòng)作追驴。那么,首先來(lái)創(chuàng)建一個(gè)往下跳的動(dòng)作吧疏之。
auto moveDown = MoveBy::create(0.5f, Vec2(0, -50));
很簡(jiǎn)單殿雪,把跳動(dòng)的距離改為向下50個(gè)單位就好了。現(xiàn)在向上跳動(dòng)有了锋爪,向下跳動(dòng)也有了丙曙, 那么怎么組合這些動(dòng)作呢?這里需要用的這個(gè)類:Squence
其骄,顧名思義亏镰,是組合一系列順序執(zhí)行的動(dòng)作:
auto sequence = Sequence::create(moveUp, moveDown, nullptr);
mJumpSprite->runAction(sequence);
這個(gè)Sequence
類也是一個(gè)動(dòng)作類,有些人就會(huì)對(duì)此剛好莫名其妙年栓。這里的實(shí)現(xiàn)方式有點(diǎn)設(shè)計(jì)模式中組合模式
的味道,同類事物的集合呢薄霜,也算作是這種類型某抓。上面的第二行的代碼證明了Squence
是一個(gè)動(dòng)作類,因?yàn)閞unAction的參數(shù)類型是:Action
現(xiàn)在惰瓜,我們?cè)趫?zhí)行代碼否副,會(huì)返現(xiàn)小精靈,能夠上下跳動(dòng)了崎坊,但是還有不足的地方备禀,它只能跳動(dòng)一次啊奈揍!我們希望它能夠永不停止得跳動(dòng)才好哇曲尸!怎么辦呢?cocos2dx已經(jīng)為你考慮了這一點(diǎn)男翰,RepeatForever
類來(lái)幫助你另患!
auto repeat = RepeatForever::create(sequence);
mJumpSprite->runAction(repeat);
代碼就是這樣寫的咯,你運(yùn)行一下看看就知道了蛾绎。要的效果確實(shí)是我們想要的昆箕,但是還有一點(diǎn)疑問(wèn)鸦列?RepeatForever
這個(gè)類也是Action
類? 是的鹏倘,就是薯嗤。此處的實(shí)現(xiàn)手法就和裝飾者模式
一個(gè)套路!
好了纤泵,就此打住骆姐。我們只是簡(jiǎn)答介紹了cocos2d-x中的一個(gè)動(dòng)作類MoveBy
, coco2d-x中已經(jīng)為你提供了很多常見(jiàn)的動(dòng)作類,如移動(dòng)還有MoveTo
,縮放還有ScaleTo
,ScaleBy
夕吻,詳細(xì)的可以去看cocos2d-x的Api文檔诲锹!
還是進(jìn)入下一個(gè)主題吧!實(shí)現(xiàn)一個(gè)可以被我們拖拽的精靈涉馅。
cocos2d-x事件處理機(jī)制
(明天再寫吧归园, :))
結(jié)尾
希望你的游戲開(kāi)發(fā)之旅充滿快樂(lè),希望你和我一樣熱愛(ài)游戲稚矿,熱愛(ài)游戲開(kāi)發(fā)庸诱!