1. 程式人生 > >Cocos2d-x 3.x 生成和載入plist檔案

Cocos2d-x 3.x 生成和載入plist檔案

一、建立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遊戲開發之旅 鍾迪龍 著