Cocos2d-x 是一個基于 C++ 的 2D(有限的3D)游戲引擎,支持構建跨平臺游戲應用程序。在使用 Cocos2d-x 時我們會面對很多不同的文件格式,其中 JSON 格式也是一個很重要的格式。JSON 格式是一種輕量級的數據交換格式,易于閱讀和編寫,同時也易于機器構造和解析,通常應用于網絡數據傳輸。
Cocos2d-x 中提供了 Json 類以方便我們對 JSON 文件進行讀取和寫入操作。Json 類提供一系列相關的方法來操作 JSON 對象,例如從文件讀取 JSON 對象、從字符串中解析 JSON 對象、將 JSON 對象轉換成字符串等。在 Cocos2d-x 中 Json 類的定義如下:
class CC_DLL Json : public Ref { public: static bool getItem(Json* json, const char* key); static Json* create(); static Json* createWithFile(const char* fileName); static Json* createWithJsonString(const char* jsonString); static Json* createWithJsonValue(const rapidjson::Value& jsonValue); static Json* createJsonWithFilePath(const char* filePath); static Json* createJsonWithString(const char* jsonString); static Json* createJsonWithJsonValue(const rapidjson::Value& jsonValue); static Json* createWithData(const char* data, ssize_t length); static bool writeToFile(Json* json, const char* fullPath); static std::string writeToString(Json* json); // 省略其他成員函數 };
通過 Json 類,我們可以很方便地讀取 JSON 文件內容,并將其轉換成可操作的數據類型,例如數組、字典等。下面是一個例子:
const std::string jsonFileName = "data.json"; std::string fullPath = FileUtils::getInstance()->fullPathForFilename(jsonFileName.c_str()); std::string fileContent = FileUtils::getInstance()->getStringFromFile(fullPath); Json* json = Json::createWithJsonString(fileContent.c_str()); if(json == nullptr) { CCLOG("Error opening file: %s", fullPath.c_str()); return; } // 從 JSON 對象中讀取數據 std::string name = json->getItem("name")->asString(); int count = json->getItem("count")->asInt(); CCLOG("Count: %d", count); Json* items = json->getItem("items"); if(items != nullptr && items->isArray()) { int itemCount = items->size(); for(int i = 0; i< itemCount; ++i) { Json* item = items->getSubItem(i); if(item != nullptr && item->isObject()) { std::string itemName = item->getItem("name")->asString(); int itemValue = item->getItem("value")->asInt(); CCLOG("Item: %s:%d", itemName.c_str(), itemValue); } } }
通過上面的代碼我們可以從 data.json 文件中讀取數據,并將其轉化為可操作的數據類型。這便是 JSON 格式在 Cocos2d-x 中的應用。