Cocos2d-x 3.2 大富翁遊戲項目開發-第十二部分 顯示回合計數器

在右下角顯示遊戲進行的回合數:

實現方式:

1、 在GameBaseScene類中創建幀緩存存放十個數字的SpriteFrame,代表0-9的阿拉伯數字,放入Vector中

2、 在GameBaseScene類中定義變量gameRoundCount,初始值爲0

3、 在GameBaseScene類中定義refreshRoundDisplay()方法,用來刷新回合顯示

實現方式,採用數字取模,除以0不爲零,直到取完,從digiteVector取得sprite對象,倒序放入refreshRoundVector中,取模完畢後,刷新顯示

4、 當所有角色走完一遍後,gameRoundCount++,然後調用refreshRoundDisplay()刷新顯示

下面看代碼實現


//1、根據數字plist文件 在幀緩存中存放數字spriteFrame,同時存入digiteRoundVector容器中
void GameBaseScene::addDigiteRoundSprite()
{
	//2、定義變量gameRoundCount,初始值爲0,記錄遊戲進行的回合數
	gameRoundCount=0;
	auto frameCache = SpriteFrameCache::getInstance();
    	frameCache->addSpriteFramesWithFile("map/digital_round.plist");

	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_0));
	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_1));
	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_2));
	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_3));
	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_4));
	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_5));
	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_6));
	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_7));
	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_8));
	digiteRoundVector.pushBack(frameCache->getSpriteFrameByName(DIGITAL_9));

}

3、refreshRoundDisplay()方法,用來刷新回合顯示
void GameBaseScene::refreshRoundDisplay()
{
	// refreshRoundVector容器存放之前回合數相關的Sprite ,所以在刷新之前要把前面的清除
	for(auto it = refreshRoundVector.begin();it != refreshRoundVector.end();it++)
	{
		((Sprite*) *it)->setVisible(false);
	}

	refreshRoundVector.clear();
	int count = gameRoundCount;
	Sprite* st;
	//當遊戲剛開始,顯示回合數爲0 
	if(count ==0 )
	{
		st = Sprite::createWithSpriteFrame(digiteRoundVector.at(0));
		addChild(st);
		refreshRoundVector.pushBack(st);
	}
//把數字轉換成Sprite 存放進refreshRoundVector容器
	while(count!=0)
	{
		st = Sprite::createWithSpriteFrame(digiteRoundVector.at(count%10));
		addChild(st);
		refreshRoundVector.pushBack(st);
		count = count/10;

	}
//存放時由於取模計算,都是倒序存放的,所以正確顯示時要把順序倒過來
	refreshRoundVector.reverse();

	for(int i = 0;i< refreshRoundVector.size();i++)
	{
		Sprite * sp = refreshRoundVector.at(i);
		sp->setPosition(ccp((tableStartPosition_x+50)+(i*25),50));
		sp->setVisible(true);
	}

}

4、	當所有角色走完一遍後,gameRoundCount++,然後調用refreshRoundDisplay()刷新顯示
我們在接收到要求顯示go按鈕的時候處理這段邏輯

void GameBaseScene::receivedMsgForGo(Object* data)
{
	if(retMsgType ==1)
	{
		……………
		diceSprite->resume();
		gameRoundCount++;
		refreshRoundDisplay();
	}
……………………..
}



點擊下載代碼  http://download.csdn.net/detail/lideguo1979/8307969


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

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