2014-05-15 25 views
0

我無法使用本機cocos2d-x功能下載圖片。 我使用HttpRequest嘗試在Android上下載圖片。 當我使用URL,InputStream和Java中的OutputStream來下載圖片。 圖片是有效的,當我嘗試使用本機cocos2d-x功能。這張照片會有問題。 有問題的Cocos2d-x版本是寫作時的最新3.0版本。使用cocos2d-x下載圖片

+0

你能解釋一下多一點?你從哪裏下載圖片? URL的格式?你有沒有試過cURL? – GameDeveloper

+0

我試圖使用URL下載Facebook個人資料圖片。這是示例網址:https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/t1.0-1/c23.7.85.85/s50x50/47592_463162731539_7912001_s.jpg HttpRequest是一個包裝遊戲引擎,它在內部使用cURL。我不打算直接使用cURL,但如果沒有選擇,我會嘗試使用它。 –

回答

3

在cocos2d-x你編寫代碼

void HelloWorld::loadImage() 
{ 
    log("onHttpRequestCompleted In the request"); 
    HttpRequest* request = new (std::nothrow) HttpRequest(); 
    request->setUrl("https://graph.facebook.com/100000706355105/picture?width=120&height=120"); 
    request->setRequestType(cocos2d::network::HttpRequest::Type::GET); 
    request->setResponseCallback(CC_CALLBACK_2(HelloWorld::onRequestImgCompleted, this)); 
    request->setTag("Post test2"); 
    HttpClient::getInstance()->send(request); 
    request->release(); 
} 

在RequestCompleted

void HelloWorld::onRequestImgCompleted(HttpClient *sender, HttpResponse *response) 
{ 

    log("In HelloWorld"); 
    log("AppDelegate::onHttpRequestCompleted - onHttpRequestCompleted BEGIN"); 
    if (!response) 
    { 
     log("onHttpRequestCompleted - No Response"); 
     return; 
    } 

    log("onHttpRequestCompleted - Response code: %lu", response->getResponseCode()); 

    if (!response->isSucceed()) 
    { 
     log("onHttpRequestCompleted - Response failed"); 
     log("onHttpRequestCompleted - Error buffer: %s", response->getErrorBuffer()); 
     return; 
    } 
    log("onHttpRequestCompleted - Response code: %s", response->getResponseDataString()); 

    std::vector<char> *buffer = response->getResponseData(); 
    const char* file_char = buffer->data(); 
    log("onHttpRequestCompleted - Response code: %s", file_char); 
    Image * image = new Image(); 
    image-> initWithImageData (reinterpret_cast<const unsigned char*>(&(buffer->front())), buffer->size()); 
    Texture2D * texture = new Texture2D(); 
    texture-> initWithImage (image); 
    Sprite * sprite = Sprite :: createWithTexture (texture); 
    sprite->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2)); 
    addChild(sprite); 

    log("onHttpRequestCompleted height %f", sprite->getContentSize().height); 

}