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型血的人比較容易被叮,而體味重的人比較容易被叮