Cocos2d-x開發執行個體介紹特效示範,cocos2d-x執行個體

來源:互聯網
上載者:User

Cocos2d-x開發執行個體介紹特效示範,cocos2d-x執行個體
下面我們通過一個執行個體介紹幾個特效的使用,這個執行個體所示,是一個操作菜單情境,選擇菜單可以進入到動作情境,在動作情境中點擊Go按鈕可以執行我們選擇的特性動作,點擊Back按鈕可以返回到菜單情境。


下面我們再看看具體的程式碼,首先看一下看HelloWorldScene.h檔案,它的代碼如下:

#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__ #include "cocos2d.h"#include "MyActionScene.h"                                                                                                                ① typedef enum {                                                                                                                             ②   kFlipX3D = 101,   kPageTurn3D,    kLens3D,    kShaky3D,    kWaves3D,    kJumpTiles3D,    kShakyTiles3D,    kWavesTiles3D} ActionTypes;                                                                                                                             ③ class HelloWorld : public cocos2d::Layer{public:   static cocos2d::Scene* createScene();   virtual bool init();       void OnClickMenu(cocos2d::Ref* pSender);                                                                    ④    CREATE_FUNC(HelloWorld);}; #endif // __HELLOWORLD_SCENE_H__

上述代碼第①行是引入標頭檔MyActionScene.h。第②~③是定義個枚舉類型ActionTypes,枚舉類型ActionTypes中定義了8個常量,這8個常量對應8個功能表項目。第④行聲明了一個函數,用來在選擇不同菜單時候的回調。

下一個情境MyActionScene的 MyActionScene.h檔案的代碼如下:#ifndef __MYACTION_SCENE_H__#define __MYACTION_SCENE_H__ #include "cocos2d.h"#include "HelloWorldScene.h" class MyAction : public cocos2d::Layer{   cocos2d::Sprite *sprite;                                                                                                        ①   cocos2d::NodeGrid* gridNodeTarget;                                                                                         ②   public:           staticcocos2d::Scene* createScene();   virtual bool init();    CREATE_FUNC(MyAction);      void goMenu(cocos2d::Ref* pSender);   void backMenu(cocos2d::Ref* pSender);}; #endif // __MYACTION_SCENE_H__

上述代碼第①行是聲明Sprite類型成員變數sprite。第②行是聲明NodeGrid類型成員變數gridNodeTarget,NodeGrid是網格動作管理類,它的類圖如所示。

  

 

MyActionScene.ccp中的MyAction::init()主要代碼如下:

bool MyAction::init(){   if ( !Layer::init() )   {       return false;   }      Size visibleSize = Director::getInstance()->getVisibleSize();        gridNodeTarget= NodeGrid::create();                                                                              ①   addChild(gridNodeTarget);                                                                                                 ②      auto bg = Sprite::create("background.png");    bg->setPosition(Point(visibleSize.width/2,visibleSize.height /2));    gridNodeTarget->addChild(bg);                                                                                                     ③    sprite = Sprite::create("hero.png");   sprite->setPosition(Point(visibleSize.width / 2, visibleSize.height /2));   gridNodeTarget->addChild(sprite);                                                                                             ④       autobackMenuItem =MenuItemImage::create("back-up.png","back-down.png",                                       CC_CALLBACK_1(MyAction::backMenu,this));    backMenuItem->setPosition(Director::getInstance()->convertToGL(Point(140,65)));     autogoMenuItem = MenuItemImage::create("go-up.png","go-down.png",                                       CC_CALLBACK_1(MyAction::goMenu,this));    goMenuItem->setPosition(Director::getInstance()->convertToGL(Point(920,540)));    Menu* mn = Menu::create(backMenuItem, goMenuItem, NULL);       mn->setPosition(Point::ZERO);   this->addChild(mn);                                                                                                                       ⑤      return true;}

上述代碼第①行代碼NodeGrid::create()建立NodeGrid對象,第②行代碼需要將建立的NodeGrid對象gridNodeTarget添加到當前層中。第③行代碼gridNodeTarget->addChild(bg)是將建立的bg背景精靈對象添加到gridNodeTarget,這樣才能使得特效作用於背景精靈。第④行代碼gridNodeTarget->addChild(sprite)也是將建立的精靈對象sprite添加到gridNodeTarget中,這樣才能使得特效作用於精靈。

由於我們不想使特效作用於菜單,所以在第⑤行代碼使用的this->addChild(mn),而不是gridNodeTarget->addChild(mn)。

MyActionScene.ccp中的MyAction::goMenu(cocos2d::Ref*pSender)主要代碼如下:

 

void MyAction::goMenu(cocos2d::Ref*pSender){    SizevisibleSize = Director::getInstance()->getVisibleSize();   log("Tag = %i",this->getTag());      switch (this->getTag()) {         casekFlipX3D:           gridNodeTarget->runAction(FlipX3D::create(3.0f));                                                      ①             break;         casekPageTurn3D:            gridNodeTarget->runAction(PageTurn3D::create(3.0f,Size(15,10)));                          ②             break;         casekLens3D:           gridNodeTarget->runAction(Lens3D::create(3.0f, Size(15,10),                                                Point(visibleSize.width/2,visibleSize.height/2),240));                       ③             break;         casekShaky3D:           gridNodeTarget->runAction(Shaky3D::create(3.0f, Size(15,10), 5,false));                  ④             break;         casekWaves3D:           gridNodeTarget->runAction(Waves3D::create(3.0f, Size(15,10), 5, 40));            ⑤             break;         casekJumpTiles3D:           gridNodeTarget->runAction(JumpTiles3D::create(3.0f, Size(15,10), 2,30));              ⑥             break;         casekShakyTiles3D:           gridNodeTarget->runAction(ShakyTiles3D::create(3.0f, Size(16,12), 5,false));         ⑦             break;         casekWavesTiles3D:           gridNodeTarget->runAction(CCWavesTiles3D::create(3.0f,Size(15,10), 4, 120));     ⑧             break;    }}

在上述代碼goMenu函數中是運行特效動作,第①行是使用FlipX3D實現X軸3D翻轉特效,create函數的參數是期間。

第②行是使用PageTurn3D實現翻頁特效特效,create函數的第一個參數是期間,第二個參數是網格的大小。

第③行是使用Lens3D實現凸透鏡特效,create函數第一個參數透鏡中心點,第二個參數是透鏡半徑,第三個參數網格大小,第四個參數是期間。

第④行是使用Shaky3D實現晃動特效,create函數第一個參數是期間,第二個參數是網格的大小,第三個參數晃動的範圍,第四個參數是否伴有Z軸晃動。

第⑤行是使用Waves3D實現3D波動特效,create函數第一個參數是期間,第二個參數是網格的大小,第三個參數波動次數,第四個參數是振幅。

第⑥行是使用JumpTiles3D實現晃動特效,3D瓦片跳動特效,create函數第一個參數是期間,第二個參數是網格的大小,第三個參數跳動次數,第四個參數是跳動幅度。

第⑦行是使用ShakyTiles3D實現3D瓦片晃動特效,create函數第一個參數是期間,第二個參數是網格的大小,第三個參數晃動的範圍,第四個參數是否伴有Z軸晃動。

第⑧行是使用WavesTiles3D實現3D瓦片波動特效,create函數第一個參數是期間,第二個參數是網格的大小,第三個參數動次數,第四個參數是振幅。



更多內容請關注Cocos2d-x系列圖書《Cocos2d-x實戰(卷Ⅰ):C++開發》本書交流討論網站:http://www.cocoagame.net歡迎加入cocos2d-x技術討論群:257760386、327403678


翻譯:我將以一個射擊遊戲的項目為執行個體,以Cocos2d-x為核心向大家展示一個開源的跨平台的高效的開發流程

翻譯:我將以一個射擊遊戲的項目為執行個體,以Cocos2d-x為核心向大家展示一個開源的跨平台的高效的開發流程
舉報|2014-05-13 15:00 提問者懸賞:5分 | KINGOO01 | 分類:網站使用 | 瀏覽16次
別用takeXXX 太口頭了

這是一道待解決的難題
您的回答被採納後將獲得系統獎勵20(財富值+經驗值)+難題獎勵30(財富值+經驗值)+提問者懸賞5(財富值+經驗值)
我來幫他解答|搜尋相關資料
加粗
飄紅
符號
編號
排版
圖片

附件
地圖
代碼語言

來知道用戶端答題,採納即可多得30(財富值+經驗值)
 
老是被蚊子咬,有好辦法?聽說與血型有關

跟血型和自身的體味都有關係,一般B型血的人比較容易被叮,而體味重的人比較容易被叮
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.