cocos2dx 3.x lua http请求网络图片,自己封装的,很好用,需要的可以看看

36 篇文章 0 订阅
绑定了一个c++函数到lua,lua这边是这样调用的:


   ---测试 http请求网络图片 的代码
    local function HttpRequestCompleted(statusCode,tagNum,image)
        print("图片数据请求结果 statusCode:"..statusCode.."  tag:"..tagNum)

---200表示获取网络图片成功,否则失败
        if statusCode==200 then

            local texture=cc.Texture2D:new()
            texture:initWithImage(image)
            local sp_goodsItem=cc.Sprite:createWithTexture(texture)  --直接创建请求的网络图片精灵,不用再保存到本地,很方便的

        end

    end
    ---最后一个参数是tag值,缺省是-1,这个参数与回调函数HttpRequestCompleted的第2个参数对应
 CUserData:ShareUserData():requestGoodsImageFromWeb("http://h.hiphotos.baidu.com/zhidao/pic/item/5bafa40f4bfbfbed0470471b78f0f736afc31fac.jpg",HttpRequestCompleted,123)






c++实现如下:
void CUserData::requestGoodsImageFromWeb(std::string strUrl,int callback,int tag)
{
    if (strUrl.length()==0 || callback==0)
    {
        return;
    }

    HttpRequest* request = new HttpRequest();
    request->setRequestType(HttpRequest::Type::GET);
    request->setUrl(strUrl.c_str());
    request->setResponseCallback(std::bind(&CUserData::onHttpRequestCompleted_head, this,std::placeholders::_1,std::placeholders::_2,callback,tag));

    HttpClient::getInstance()->send(request);
    request->release();
}


void CUserData::onHttpRequestCompleted_head(HttpClient *sender, HttpResponse *response,int callback,int tag)
{
    if (response && response->isSucceed())
    {
        log("response code: %ld", response->getResponseCode());

        // 打印接收到的字符串
        std::vector<char> *buffer = response->getResponseData();
        std::string bufffff(buffer->begin(),buffer->end());
        log("%s", bufffff.c_str());

        if (callback!=0) {
            LuaStack *stack = LuaEngine::getInstance()->getLuaStack();
            stack->pushInt(200);
            stack->pushInt(tag);
            auto img=new Image;
            img->autorelease();
            img->initWithImageData((const unsigned char *)buffer->data(), buffer->size());
            stack->pushObject(img, "Image");
            stack->executeFunctionByHandler(callback, 3);  //执行lua函数
            stack->clean();

        }

        return;
    }


    if (response){
        log("response code: %ld", response->getResponseCode());
        log("error buffer: %s", response->getErrorBuffer());
    }

    if (callback!=0) {
        LuaStack *stack = LuaEngine::getInstance()->getLuaStack();
        stack->pushInt(0);
        stack->pushInt(tag);
        stack->executeFunctionByHandler(callback, 2);  //执行lua函数
        stack->clean();

    }

}








绑定到lua的代码如下:
int lua_cocos2dx_custom__CUserData_requestGoodsImageFromWeb(lua_State* tolua_S)
{
    int argc = 0;
    cocos2d::CUserData* cobj = nullptr;
    bool ok  = true;

#if COCOS2D_DEBUG >= 1
    tolua_Error tolua_err;
#endif


#if COCOS2D_DEBUG >= 1
    if (!tolua_isusertype(tolua_S,1,"cc.CUserData",0,&tolua_err)) goto tolua_lerror;
#endif

    cobj = (cocos2d::CUserData*)tolua_tousertype(tolua_S,1,0);

#if COCOS2D_DEBUG >= 1
    if (!cobj)
    {
        tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_custom__CUserData_requestGoodsImageFromWeb'", nullptr);
        return 0;
    }
#endif

    argc = lua_gettop(tolua_S)-1;
    if (argc == 2)
    {
        std::string arg0;
        int arg1;

        ok &= luaval_to_std_string(tolua_S, 2,&arg0);

        arg1=toluafix_ref_function(tolua_S, 3, 0);
        if(!ok)
            return 0;
        cobj->requestGoodsImageFromWeb(arg0, arg1);
        return 0;
    }else if (argc == 3)
    {
        std::string arg0;
        int arg1;
        int arg2;

        ok &= luaval_to_std_string(tolua_S, 2,&arg0);

        arg1=toluafix_ref_function(tolua_S, 3, 0);

        ok &= luaval_to_int32(tolua_S, 4, &arg2);
        if(!ok)
            return 0;
        cobj->requestGoodsImageFromWeb(arg0, arg1,arg2);
        return 0;
    }
    CCLOG("%s has wrong number of arguments: %d, was expecting %d \n", "requestGoodsImageFromWeb",argc, 2);
    return 0;

#if COCOS2D_DEBUG >= 1
tolua_lerror:
    tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_custom__CUserData_requestGoodsImageFromWeb'.",&tolua_err);
#endif

    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值