如何用url创建Sprite?

时间:2015-01-27 13:16:29

标签: android c++ cocos2d-x

我正在使用cocos2dx v3.0开发跨平台应用程序(iOS,Android)。我想用URL创建一个CCSprite。我认为没有cocos方法可以做到这一点,所以我必须为Android和iOS分叉我的代码。

1 个答案:

答案 0 :(得分:0)

You have to Http request the image url and once you got the response, you can create image from that response data and save it to your phone. After that you can create the sprite from the save image.

    void ClassName::downLoadImage()
    {
            std::string strImage = "img.png";

            CCHttpRequest* request = new CCHttpRequest();
            request->setUrl("url of your image");
            request->setRequestType(CCHttpRequest::kHttpGet);
            request->setResponseCallback(this, httpresponse_selector(ClassName::onImageDownLoaded));
            request->setTag(strImage.c_str());
            CCHttpClient::getInstance()->send(request);
            request->release();
    }

    void ClassName::onImageDownLoaded(CCHttpClient* pSender, CCHttpResponse* pResponse)
    {
        CCHttpResponse* response = pResponse;

        if (!response)
        {
            CCLog("No Response");
            return;
        }
        int statusCode = response->getResponseCode();

        char statusString[64] = {};
        sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag());
        CCLog("response code: %d", statusCode);

        if (!response->isSucceed())
        {
            CCLog("response failed");
            CCLog("error buffer: %s", response->getErrorBuffer());
            return;
        }
        std::vector<char> *buffer = response->getResponseData();

        CCImage * img=new CCImage();
        img->initWithImageData(&(buffer->front()), buffer->size());

        // Save image file to device.
        std::string writablePath = CCFileUtils::sharedFileUtils()->getWritablePath();
        writablePath.append(response->getHttpRequest()->getTag());


         //Now create Sprite from downloaded image
         CCSprite* pSprite = CCSprite::create(writablePath.c_str());
         addchild(pSprite);
    }