以下是從 Tiled Map Editor 匯出的 JSON 檔案。
{ "compressionlevel":-1,
"height":32,
"infinite":false,
"layers":[
{
"data":[ A whole bunch of integers in here],
"height":32,
"id":1,
"name":"Tile Layer 1",
"opacity":1,
"type":"tilelayer",
"visible":true,
"width":32,
"x":0,
"y":0
}],
"nextlayerid":2,
"nextobjectid":1,
"orientation":"orthogonal",
"renderorder":"right-down",
"tiledversion":"1.7.2",
"tileheight":32,
"tilesets":[
{
"firstgid":1,
"source":"..\/..\/..\/..\/Desktop\/tileset001.tsx"
}],
"tilewidth":32,
"type":"map",
"version":"1.6",
"width":32
}
在這個 C 塊中,我試圖決議出我真正需要的資料。
std::ifstream inFStream(filePath, std::ios::in);
if(!inFStream.is_open())
{
printf("Failed to open map file: &s", filePath);
}
rapidjson::IStreamWrapper inFStreamWrapper{inFStream};
rapidjson::Document doc{};
doc.ParseStream(inFStreamWrapper);
_WIDTH = doc["width"].GetInt(); //get width of map in tiles
_HEIGHT = doc["height"].GetInt(); //get height of map in tiles
const rapidjson::Value& data = doc["layers"]["data"]; //FAILURE POINT
assert(data.IsArray());
當我編譯時,我能夠提取正確的寬度和高度值,"layers" :[{}]
但當它const rapidjson::Value& data = doc["layers"]["data"];被呼叫時,我得到一個運行時錯誤,聲稱 document.h 行 1344IsObject()斷言失敗。
我一直在 rapidjson 網站和其他資源上上下下,找不到類似的東西。
下一步是獲取存盤在“資料”中的 int 值并將它們推送到 a 中std::vector,但在我弄清楚如何訪問“資料”之前,這不會發生
uj5u.com熱心網友回復:
doc['layers'] 是一個陣列。
const rapidjson::Value& layers = doc["layers"];
assert(layers.IsArray());
for (size_t i=0; i < layers.Size(); i ) {
const rapidjson::Value& data = doc["layers"][i]["data"];
assert(data.IsArray());
}
更新:
直接訪問第一data項layers:
const rapidjson::Value& data = doc["layers"][0]["data"];
這只會為您提供陣列data中的第一項。layers如果layers至少有一個專案并且您只需要第一個專案,那么這將始終有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419292.html
標籤:
