在右下角顯示遊戲進行的回合數:
實現方式:
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
未完待續.....................