Cocos2d-x 3.2 大富翁遊戲項目開發-第二部分區頭動畫,cocos2d-x項目開發
第二部分區頭動畫
首先在visula studio 下建立新工程
工具類ConstUtil.h,該檔案主要定義了一些圖片資源、字串、字型等
#ifndef __CONSTUTIL_H__#define __CONSTUTIL_H__//定義了誠邁科技四張圖片資源,由於在誠邁科技,就用公司名稱做動畫吧#define CHENG_IMAGE "cheng.png"#define MAI_IMAGE "mai.png"#define KE_IMAGE "ke.png"#define JI_IMAGE "ji.png"#endif
建立SplashScene.cpp和SplashScene.h檔案
在該h檔案中,主要定義了一些方法………………………….const double MOVE_SPLEED = 0.5f; //動畫播放速度void moveKeSpriteToLeft(); //定義ke.png 精靈向左移動的方法void moveMaiSpriteToLeft(); //定義mai.png精靈向左移動的方法void initMoveSprite(); //初始化圖片方法void startMoveSprite(float dt);//開始移動方法void gotoMenuScene();//動畫結束後進入MenuScene情境方法void spriteFadeOut();//動畫逐漸消失方法………………………….Sprite* mai_Sprite ;//main.png圖片精靈Sprite* ke_Sprite ;// ke.png圖片精靈Sprite* ji_Sprite;// ji.png圖片精靈Sprite* cheng_Sprite;// cheng.png圖片精靈Size visibleSize;//視窗大小Size spriteSize;//每張圖片的尺寸大小
SplashScene.cpp主要內容如下
bool SplashScene::init(){if ( !Layer::init() ) { return false; }visibleSize = Director::getInstance()->getVisibleSize();//初始化視窗尺寸變數Vec2 origin = Director::getInstance()->getVisibleOrigin();initMoveSprite(); //初始化動畫精靈方法scheduleOnce(schedule_selector(SplashScene::startMoveSprite), ONE_SECOND); //情境開始1秒後動畫開始播放 return true;}
initMoveSprite()方法如下:調用Sprite::create方法建立cheng 、mai 、 ke、 ji四個精靈mai_Sprite = Sprite::create(MAI_IMAGE);………………..spriteSize = mai_Sprite->getContentSize();//給動畫尺寸賦值,每張動畫尺寸大小都一樣。//從左至右放置精靈圖片mai_Sprite->setPosition(ccp(visibleSize.width/2 - (2 *spriteSize.width),visibleSize.height/2));ke_Sprite->setPosition(ccp(visibleSize.width/2 - spriteSize.width,visibleSize.height/2));ji_Sprite->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));cheng_Sprite->setPosition(ccp(visibleSize.width/2 + spriteSize.width,visibleSize.height/2));把精靈錨點都設定為(0,0.5),這樣保證四張圖片可以置中排列在視窗位置mai_Sprite->setAnchorPoint(ccp(0,0.5));……………………this->addChild(mai_Sprite);//添加精靈到情境
動畫開始播放:
void SplashScene::startMoveSprite(float dt){ //動畫從右向做開始,最末一個精靈 cheng 首先開始從右向左移動一個位置MoveBy* moveChengToLeft1 = MoveBy::create(MOVE_SPLEED,ccp(-spriteSize.width,0));cheng_Sprite->runAction(moveChengToLeft1); //精靈ji從左向右移動一個位置,正2個動畫相當於cheng和ji交換了位置MoveBy* moveJiToright = MoveBy::create(MOVE_SPLEED,ccp(spriteSize.width,0));CallFunc* callFunc = CallFunc::create(CC_CALLBACK_0(SplashScene::moveKeSpriteToLeft, this)); //精靈ji動畫結束後調用moveKeSpriteToLeft()方法,開始精靈ke 的動畫ji_Sprite->runAction(Sequence::create(moveJiToright,callFunc,NULL));}
精靈ke動畫:
void SplashScene::moveKeSpriteToLeft(){ //精靈 cheng從右向左再次移動一個位置MoveBy* moveChengToLeft2 = MoveBy::create(MOVE_SPLEED,ccp(-spriteSize.width,0));cheng_Sprite->runAction(moveChengToLeft2);//精靈ke從左向右移動一個位置,同cheng再次交換了位置MoveBy* ke_Sprite_MoveBy = MoveBy::create(MOVE_SPLEED,ccp(spriteSize.width,0));CallFunc* callFunc2 = CallFunc::create(CC_CALLBACK_0(SplashScene::moveMaiSpriteToLeft, this)); //精靈ke動畫結束後調用moveMaiSpriteToLeft()方法,開始精靈mai的動畫ke_Sprite->runAction(Sequence::create(ke_Sprite_MoveBy,callFunc2,NULL));}
精靈mai動畫:
void SplashScene::moveMaiSpriteToLeft(){//精靈 cheng從右向左再次移動一個位置MoveBy* moveChengToLeft3 = MoveBy::create(MOVE_SPLEED,ccp(-spriteSize.width,0));cheng_Sprite->runAction(moveChengToLeft3);//精靈mai從左向右移動一個位置,同cheng再次交換了位置MoveBy* mai_Sprite_MoveBy = MoveBy::create(MOVE_SPLEED,ccp(spriteSize.width,0));CallFunc* callFunc3 = CallFunc::create(CC_CALLBACK_0(SplashScene::spriteFadeOut, this));//精靈mai動畫結束後調用spriteFadeOut()方法,開始情境消失的動畫mai_Sprite->runAction(Sequence::create(mai_Sprite_MoveBy,callFunc3,NULL));}
情境消失動畫:
void SplashScene:: spriteFadeOut(){//定義4個消失的FadeOut動畫,期間2秒FadeOut* fadeOut1 = FadeOut::create(ONE_SECOND*2);FadeOut* fadeOut2 = FadeOut::create(ONE_SECOND*2);FadeOut* fadeOut3 = FadeOut::create(ONE_SECOND*2);FadeOut* fadeOut4 = FadeOut::create(ONE_SECOND*2);mai_Sprite->runAction(fadeOut1) ;ke_Sprite->runAction(fadeOut2) ; ji_Sprite->runAction(fadeOut3) ;CallFunc* callFunc4 = CallFunc::create(CC_CALLBACK_0(SplashScene::gotoMenuScene, this));//動畫結束後調用gotoMenuScene()方法進入MenuScene情境介面cheng_Sprite->runAction(Sequence::create(fadeOut4,callFunc4,NULL));}
進入情境的方法gotoMenuScene(),暫時只列印一下log,下篇開始
void SplashScene::gotoMenuScene()
{
log("gotoMenuScene");
Director::getInstance()->replaceScene(MenuScene::createScene());
}
過程很簡單,如下流程圖所示
標題動畫結束,待續................