cocos2dx 3.x lua http请求网络图片,自己封装的,很好用,需要的可以看看
来源:互联网 发布:绍兴哪里买黄酒知乎 编辑:程序博客网 时间:2024/06/16 01:12
绑定了一个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;
}
---测试 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;
}
0 0
- cocos2dx 3.x lua http请求网络图片,自己封装的,很好用,需要的可以看看
- ios 对请求工具AFNetWoring封装自己的一些用法分享(觉得有用的可以看看)
- 对cocos2dx lua中http请求的简要封装和使用
- 对cocos2dx lua中http请求的简要封装和使用
- cocos2dx lua http请求获取网络数据:
- cocos2dx lua http请求获取网络数据:
- 【COCOS2DX-LUA 脚本开发之八】不用CCHttpClient而转用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http网络交互!
- 【COCOS2DX-LUA 脚本开发之八】不用CCHttpClient而转用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http网络交互!
- 【COCOS2DX-LUA 脚本开发之八】不用CCHttpClient而转用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http网络交互!
- 【COCOS2DX-LUA 脚本开发之八】使用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http网络交互!
- AFNetworking 2.5.x 网络请求的封装
- 项目优化-Http网络请求的封装
- 在红客论坛上看到的,可以看看——自己觉得很好
- lua教程八----不用CCHttpClient而转用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http网络交互!
- Cocos2dx杂记:PhysicsEditor 对应cocos2dx 3.x的接口封装
- 实现登录:很好用的Android/Java网络请求http第三方开源类库
- cocos2dx-3.x HTTP 请求调用
- Tolua使用,利用pkg文件,封装自己的lua支持的cocos2dx的接口
- hander机制
- 深入浅出 RPC - 深入篇
- 正确使用StopCoroutine
- Ubuntu16.04+matlab2014a+anaconda2+OpenCV3.1+caffe安装
- Android之JNI打印调试信息-LOG打印
- cocos2dx 3.x lua http请求网络图片,自己封装的,很好用,需要的可以看看
- crontab 使用日期时间命名重定向文件
- C# 互操作性入门系列(三):平台调用中的数据封送处理
- Parameter '__frch_item_0' not found. Available parameters are [list]
- H264参数结构二:网络提取层NAL (Net Abstraction Layer) & 视频编码层VCL (Video Coding Layer)
- HTML5 应用程序缓存
- serialVersionUID介绍与作用
- 安装GraphViz以供python调用
- Java回调机制解析