Cocos2dx是一個十分好用的游戲引擎。其中,post方式發送JSON數據和解析JSON數據在游戲開發中是十分常見的操作。本文就來介紹一下在Cocos2dx中如何使用post方法發送JSON數據以及對JSON數據的解析操作。
首先,我們需要使用HttpClient對象來發送post請求。發送post請求代碼如下:
HttpRequest* request = new HttpRequest(); request->setUrl("http://www.example.com/post.php"); request->setRequestType(HttpRequest::Type::POST); request->setResponseCallback(this, httpresponse_selector(HelloWorld::onHttpRequestCompleted)); const char* postData = "{\"name\":\"test\",\"age\":20}"; request->setRequestData(postData, strlen(postData)); request->setTag("POST test"); HttpClient::getInstance()->send(request); request->release();
其中,setUrl方法設置請求的URL。setRequestType設置請求方式,這里是POST請求。setResponseCallback設置請求回調函數。setRequestData方法設置POST請求發送的JSON數據。setTag設置請求標簽,可用于后續判斷請求對象。
接下來,我們需要對服務器返回的JSON數據進行解析。在Cocos2dx中,我們可以使用rapidjson庫進行JSON解析。代碼如下:
void HelloWorld::onHttpRequestCompleted(HttpClient* sender, HttpResponse* response) { if (!response->isSucceed()) { log("HttpResponseError"); return; } std::vector* buffer = response->getResponseData(); std::string data(buffer->begin(), buffer->end()); log("%s", data.c_str()); Document doc; doc.Parse<0>(data.c_str()); if (doc.HasParseError()) { log("JSONParseError"); return; } if (doc.IsObject() && doc.HasMember("name") && doc["name"].IsString()) { std::string name = doc["name"].GetString(); log("Name: %s", name.c_str()); } if (doc.IsObject() && doc.HasMember("age") && doc["age"].IsNumber()) { int age = doc["age"].GetInt(); log("Age: %d", age); } }
其中,getResponseData方法返回服務器返回的數據。使用rapidjson庫的Document對象進行解析。HasParseError方法判斷JSON數據是否有錯誤。HasMember方法判斷JSON數據是否有該key。IsString和IsNumber方法判斷JSON數據類型。GetString和GetInt方法獲取JSON數據的值。
通過以上代碼,我們可以十分方便地使用Cocos2dx發送post請求和解析JSON數據。