Cocos2d-x 3.2 大富翁遊戲項目開發-第十一部分 提升角色行走體驗,cocos2d-x項目開發
角色在擷取隨機步數走之前需要友好的提示玩家是哪個角色開始行走,要走幾步。
這樣我們在行走之前讓角色閃一下,並把角色要走的路徑用特殊顏色標註一下。效果如下
首先實現角色閃動:閃動是角色相關的,所以我們在RicherPlayer類的startGo方法中修改最合適
voidRicherPlayer::startGo(std::vector<int>rowVector,std::vector<int>colVector){//建立淡入淡出的動作,讓角色運行,動作結束後,調用startRealGo開始行走。此處用了閉包函數簡化代碼FadeOut* fadeout = FadeOut::create(0.2);FadeIn* fadein = FadeIn::create(0.2);this->runAction(Sequence::create(fadeout,fadein,CallFunc::create([rowVector,colVector,this](){RicherGameController* instance =RicherGameController::getInstance();instance->startRealGo(rowVector,colVector,this);}),NULL));}</span>
下一步開始給路徑標註顏色,我們用6個sprite來做,把這6個sprite 放入Vector中,每次根據行走步數,從vector取出sprite,放置在路徑位置,每次走完這個路徑位置,把該sprite的visible屬性設定為false 不可見。邏輯清楚了代碼寫起來也很簡單
GameBaseScene.h 標頭檔如下:
class GameBaseScene: public Layer{public: ………………..static Vector<Sprite*> pathMarkVector;//定義Vector 用來存放6個路徑遮擋精靈static void drawPathColor(std::vector<int> rowVector,std::vector<int> colVector);//繪製路徑遮擋方法private: void addPathMark();//定義添加遮擋精靈的方法 …………………….}
cpp檔案
bool GameBaseScene::init(){………………..//添加遮擋的方法一定要在添加角色方法之前,防止角色也被遮擋住addPathMark();addPlayer();……………………..return true;}
在GameBaseScene.cpp中實現這個addPathMark方法
void GameBaseScene::addPathMark(){//這個方法就是建立6個路徑遮擋Sprite,並添加到當前情境中Sprite* mark1 = Sprite::create(PATH_MARK_1);Sprite* mark2 = Sprite::create(PATH_MARK_2);Sprite* mark3 = Sprite::create(PATH_MARK_3);Sprite* mark4 = Sprite::create(PATH_MARK_4);Sprite* mark5 = Sprite::create(PATH_MARK_5);Sprite* mark6 = Sprite::create(PATH_MARK_6);mark1->setAnchorPoint(ccp(0,0));mark2->setAnchorPoint(ccp(0,0));mark3->setAnchorPoint(ccp(0,0));mark4->setAnchorPoint(ccp(0,0));mark5->setAnchorPoint(ccp(0,0));mark6->setAnchorPoint(ccp(0,0));//都為不可見mark1->setVisible(false);mark2->setVisible(false);mark3->setVisible(false);mark4->setVisible(false);mark5->setVisible(false);mark6->setVisible(false);addChild(mark1);addChild(mark2);addChild(mark3);addChild(mark4);addChild(mark5);addChild(mark6);pathMarkVector.pushBack(mark1);pathMarkVector.pushBack(mark2);pathMarkVector.pushBack(mark3);pathMarkVector.pushBack(mark4);pathMarkVector.pushBack(mark5);pathMarkVector.pushBack(mark6);}
//繪製路徑遮擋方法void GameBaseScene::drawPathColor(std::vector<int> rowVector,std::vector<int> colVector){//取得要繪製遮擋數量,因為路徑數組0的位置是角色當前位置,不應繪製遮擋int stepsCount = rowVector.size()-1; //從遮擋容器中取出遮擋Sprite,放置到對應位置,並設為可見for(int i=1;i<rowVector.size();i++){pathMarkVector.at(i-1)->setPosition(ccp(colVector[i]*32,rowVector[i]*32));pathMarkVector.at(i-1)->setVisible(true);}}
在RicherPlayer::startGo方法中在真正開始行走之前,畫出路徑遮擋效果void RicherPlayer::startGo(std::vector<int> rowVector,std::vector<int> colVector){//Blink* blink = Blink::create(0.5,1);FadeOut* fadeout = FadeOut::create(0.2);FadeIn* fadein = FadeIn::create(0.2);//畫出路徑遮擋效果GameBaseScene::drawPathColor(rowVector,colVector);this->runAction(Sequence::create(fadeout,fadein,CallFunc::create([rowVector,colVector,this](){RicherGameController* instance =RicherGameController::getInstance();instance->startRealGo(rowVector,colVector,this);}),NULL));}
void RicherGameController::endGo(){//在每次移動結束後,把當前路徑遮擋效果設為不可見,這樣就出現了每走完一步,當前路徑遮擋消失的效果GameBaseScene::pathMarkVector.at(stepHasGone)->setVisible(false);stepHasGone++;………………log("go end");}
點擊下載代碼 http://download.csdn.net/detail/lideguo1979/8305165
未完待續.........................