Cocos2d-x 3.x 生成和載入plist檔案
阿新 • • 發佈:2019-02-10
一、建立plist檔案
在學習《Cocos2d-x 3.x遊戲開發之旅》時,點選完螢幕以建立很多炮塔的(x, y)座標,使用ValueMap把炮塔座標寫入plist檔案,儲存當前玩家建立的炮塔,以便再次進入遊戲時還原之前的炮塔(根據座標)。下面是建立plist檔案的函式:
void TowerPosEditorScene::outputPosToPlistFile()
{
String* s_pFilePath = String::createWithFormat("tollgate/towerPos_level_%d.plist", m_iCurLevel);
outputPosToPlistFile(m_towerPosList, s_pFilePath->getCString());
}
// 輸出plist檔案————炮臺座標
void TowerPosEditorScene::outputPosToPlistFile(Vector<PosBase*> coll, const char* sFilePath)
{
ValueMap fileDataMap;
int index = 1;// 這裡從1開始
for (auto posBase : coll)
{
ValueMap data; // typedef unordered_map<std::string key, Value value> ValueMap;
data["x"] = posBase->getPos().x; // data[key] = value;
data["y"] = posBase->getPos().y; // 注意:fileDataMap為key,data為value
fileDataMap[StringUtils::toString(index)] = Value(data);// fileDataMap[key] = value
index++;
}
// Write a ValueMap into a plist file.
FileUtils::getInstance()->writeToFile(fileDataMap, sFilePath);
}
在outputPosToPlistFile()函式中,首先使用cocos2d::String類建立儲存plist檔案的”完整路徑s_pFilePath變數“,然後把該變數傳入過載的outputPosToPlistFile函式。注意
:這裡建立檔案的方式有點小特別:根據遊戲當前等級來命名要建立的plist檔案,這樣做的好處是,不同等級(或關卡)都會有一份plist檔案。
m_towerPosList變數為在在TowerPosEditorScene中宣告,用於儲存炮塔座標,PosBase為TowerPos的基類。
二、讀取plist檔案
玩家建立好炮塔後,點選“輸出到檔案”後,所有建立的炮塔座標都存在了plist檔案中,那麼怎麼讀取(遍歷)plist檔案中的炮塔座標,並把炮塔還原到螢幕呢?作者是這麼處理的:
/// 載入座標物件
Vector<PosBase*> PosLoadUtil::loadPosWithFile(const char* sFilePath, Node* container, int iLevel, bool isDebug)
{
Vector<PosBase*> posList;
ValueMap fileDataMap = FileUtils::getInstance()->getValueMapFromFile(sFilePath);
int size = fileDataMap.size();
for (int i = 1; i <= size; i++)// 注意i從1開始並<=size
{
Value value = fileDataMap[StringUtils::toString(i)];
ValueMap data = value.asValueMap();
PosBase* posBase = TowerPos::create(Point(data["x"].asInt(), data["y"].asInt()), isDebug);
posList.pushBack(posBase);
if (container != NULL)
{
container->addChild(posBase, iLevel);
}
}
return posList;
}
參考:Cocos2d-x 3.x遊戲開發之旅 鍾迪龍 著