Cocos2d-x 3.2 大富翁遊戲項目開發-第十一部分 提升角色行走體驗

角色在獲取隨機步數走之前需要友好的提示玩家是哪個角色開始行走,要走幾步。

這樣我們在行走之前讓角色閃一下,並把角色要走的路徑用特殊顏色標註一下。效果如下



首先實現角色閃動:閃動是角色相關的,所以我們在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


未完待續.........................

發佈了77 篇原創文章 · 獲贊 48 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章