使用cocos2dxc+;中的curl从URL获取图像+; 我用C++中的CURL从COSCO2DX游戏的URL中获取图像。 代码运行良好。使用CCImage和cocos2d::CCTexture2D我创建了一个Sprite并将其添加到我的图层上

使用cocos2dxc+;中的curl从URL获取图像+; 我用C++中的CURL从COSCO2DX游戏的URL中获取图像。 代码运行良好。使用CCImage和cocos2d::CCTexture2D我创建了一个Sprite并将其添加到我的图层上,c++,curl,cocos2d-x,C++,Curl,Cocos2d X,雪碧肯定会添加到图层上,(我知道这一点,因为如果我尝试添加相同的雪碧,它会崩溃,因为子对象已经添加了,但在图层上找不到它。我尝试更改雪碧的背景颜色、ZIndex,但雪碧不可见 代码如下: void HelloWorld::getImageFromURL(const char* url) { CURL *curl; // CURL objects CURLcode res; MemoryStruct buffer; // memory buffer c

雪碧肯定会添加到图层上,(我知道这一点,因为如果我尝试添加相同的雪碧,它会崩溃,因为
子对象已经添加了
,但在图层上找不到它。我尝试更改雪碧的背景颜色、ZIndex,但雪碧不可见

代码如下:

void HelloWorld::getImageFromURL(const char* url)
{
    CURL *curl;       // CURL objects
    CURLcode res;
    MemoryStruct buffer; // memory buffer

    curl = curl_easy_init(); // init CURL library object/structure

    if(curl) {

        // set up the write to memory buffer
        // (buffer starts off empty)

        buffer.memory = NULL;
        buffer.size = 0;

        stringstream urlString;
        urlString<<url;
        // (N.B. check this URL still works in browser in case image has moved)

        CCLog("%s", urlString.str().c_str());

        curl_easy_setopt(curl, CURLOPT_URL, urlString.str().c_str());
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); // tell us what is happening

        // tell libcurl where to write the image (to a dynamic memory buffer)

        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION, Utility::WriteMemoryCallback);
        curl_easy_setopt(curl,CURLOPT_WRITEDATA, (void *) &buffer);

        // get the image from the specified URL

        res = curl_easy_perform(curl);
        CCLog("Curl code: %i", res);

        CCImage* img = new CCImage();
        img->initWithImageData((void*)buffer.memory, (long)buffer.size, CCImage::kFmtPng);
        cocos2d::CCTexture2D* texture = new cocos2d::CCTexture2D(); //TODO:: leak
        texture->initWithImage(img);


        CCSprite* sprite = CCSprite::createWithTexture(texture, CCRectMake(0, 0, 256, 256));
        sprite->setPosition(CENTRE_OF_SCREEN);
        sprite->setContentSize(CCSize(256,256));
        sprite->setAnchorPoint(ccp(0, 0));
        this->addChild(sprite,1000,1000);

        curl_easy_cleanup(curl);
        free(buffer.memory);


    }

}
void HelloWorld::getImageFromURL(const char*url)
{
CURL*CURL;//CURL对象
卷曲编码;
MemoryStruct buffer;//内存缓冲区
curl=curl\u easy\u init();//init curl库对象/结构
if(curl){
//设置写入内存缓冲区
//(缓冲区开始时为空)
buffer.memory=NULL;
buffer.size=0;
stringstream-urlString;
urlStringinitWithImage(img);
CCSprite*sprite=CCSprite::createWithTexture(纹理,CCRectMake(0,0,256,256));
精灵->设置位置(屏幕的中心);
sprite->setContentSize(CCSize(256256));
精灵->设定点(ccp(0,0));
这->添加孩子(精灵,10001000);
旋度\轻松\清洁(旋度);
空闲(缓冲区内存);
}
}
任何帮助都将不胜感激

非常感谢
W

检查您收到的CURL代码,由于域限制或URL不是来自图像,我在获取图像时遇到问题。我从不同的URL进行了测试,并从中推断出问题。希望这有帮助。

WriteMemoryCallback
看起来像什么?因为它负责编写图像data到缓冲区有可能存在问题。