2013-11-20 83 views
3

我是使用Cococs2d-X进行游戏开发的新手。我试图找到一些在我的游戏中使用HttpClient库的例子。任何人都可以给我一个例子吗?Http GET/POST请求在Coccos2d-X中

+0

是否真的很难检查其网站上的cocos2d-x文档? http://www.cocos2d-x.org/wiki/How_to_use_CCHttpClient – Morion

+0

当网站上的代码无法编译,而且您不知道如何修复时,很难。 – redux

回答

1

这是击中的getPost方法

cocos2d::extension::CCHttpRequest *request=new cocos2d::extension::CCHttpRequest(); 

request->setUrl("your url"); 
request->setRequestType(cocos2d::extension::CCHttpRequest::kHttpPost); 
request->setResponseCallback(this, httpresponse_selector(LoadingScene::yourCallBackMethod)); 

CCString *data = CCString::createWithFormat ("%s",yourData); 

request->setRequestData(data->getCString(), data->length()); 
extension::CCHttpClient::getInstance()->send(request); 

一个网址定义yourCallBackMethod这样的基本代码...

yourCallBackMethod(cocos2d::extension::CCHttpClient *sender,cocos2d::extension::CCHttpResponse *response){ 

     std::vector<char> *buffer = response->getResponseData(); 
} 
+0

错误“使用未声明的标识符'扩展'” – redux

0

这个代码是基于cocos2d的的-X

测试

//测试1

 CCHttpRequest* request = new CCHttpRequest(); 
     request->setUrl("http://just-make-this-request-failed.com"); 
     request->setRequestType(CCHttpRequest::kHttpGet); 
     request->setResponseCallback(this, httpresponse_selector(HttpClientTest::onHttpRequestCompleted)); 
     request->setTag("GET test1"); 
     CCHttpClient::getInstance()->send(request); 
     request->release(); 



/*******************************************************************************/ 

    void HttpClientTest::onHttpRequestCompleted(CCHttpClient *sender, CCHttpResponse *response) 
{ 
    if (!response) 
    { 
     return; 
    } 

    // You can get original request type from: response->request->reqType 
    if (0 != strlen(response->getHttpRequest()->getTag())) 
    { 
     CCLog("%s completed", response->getHttpRequest()->getTag()); 
    } 

    int statusCode = response->getResponseCode() 

    if (!response->isSucceed()) 
    { 
     CCLog("response failed"); 
     CCLog("error buffer: %s", response->getErrorBuffer()); 
     return; 
    } 

    // dump data 
    std::vector<char> *buffer = response->getResponseData(); 
    printf("Http Test, dump data: "); 
    for (unsigned int i = 0; i < buffer->size(); i++) 
    { 
     printf("%c", (*buffer)[i]); 
    } 
    printf("\n"); 
} 
+0

错误“使用未声明的标识符CCHttpClient”。建议我更改为cocos2d :: network :: HttpClient,其错误为“在嵌套名称说明符中命名的不完整类型cocos2d :: network :: HttpClient”。 – redux

9

对于科科斯-2DX 3.3,你需要包含以下标题和使用的命名空间声明:

#include "cocos2d.h" 
#include "network/HttpClient.h" 

USING_NS_CC; 
using namespace network; 

然后你就可以直接创建的HttpRequest:

HttpRequest* request = new HttpRequest(); 
request->setRequestType(HttpRequest::Type::GET); 
request->setUrl("http://YOUR_URL"); 
request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this)); 
request->setTag("Get test"); 
HttpClient::getInstance()->send(request); 

request->release(); 

回调函数可以处理的响应:

void HttpClientTest::onHttpRequestCompleted(HttpClient *sender, HttpResponse *response) { 
    if (response && response->getResponseCode() == 200 && response->getResponseData()) { 
     vector<char> *data = response->getResponseData(); 
     string ret(&(data->front()), data->size()); 
     CCLOG("%s", ("Response message: " + ret).c_str()); 
    } 
    else { 
     CCLOG("%s", ("Error " + to_string(response->getResponseCode()) + " in request").c_str()); //error 
    } 
}