注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

使用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http  

2014-08-12 10:50:06|  分类: ios游戏开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Cocos2dx 为我们封装了在cocos2dx中http的网络框架,其文件在cocos2dx引擎包的/Users/Himi/Documents/cocos2d-2.1rc0-x-2.1.2-hotfix/extensions/network 文件下的 HttpClient、HttpRequest 、HttpResponse如下图:



至于如何使用,Himi这里不再详细叙述,大家可以看引擎提供的例子中自己阅读学习(TestCpp项目中)
有童鞋就会问了,既然cocos2dx都已经为我们封装好了,那还讲什么? – -。

对OOP感兴趣的请看Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类

嗯,是的,我们可以通过将这几个类通过tolua++工具binding到lua中供我们来使用,但是!一般我们访问服务器时,都希望数据返回时调用我们的一个方法进行对数据的处理,那么使用CCHttpClient 我们可以通过HttpRequest请求包的时候,对其进行设置其回调函数,如下:
  1. inline void setResponseCallback(CCObject* pTarget, SEL_CallFuncND pSelector)
  2.     {
  3.         _pTarget = pTarget;
  4.         _pSelector = pSelector;

  5.         if (_pTarget)
  6.         {
  7.             _pTarget->retain();
  8.         }
  9.     }
复制代码

大家可以看到此函数需要一个SEL_CallFuncND的参数,而SEL_CallFuncND是个宏定义,并且cocos2dx binding到Lua的LuaCocos2d.cpp 中是没有将SEL_CallFuncND进行binding的。
当然大家如果可以将lua调用setResponseCallback的办法解决,那么则可以直接使用cocos2dx引擎包下的network即可。
另外我们可以通过一些别的办法进行解决,当然以下内容也是我们本篇所要重点介绍的! 
首先还是继续介绍下quick-cocos2d-x框架,对于quick-cocos2d-x 其实在之前简单的介绍了,它是一个基于cocos2d-x lua进行扩展的一个框架,使用quick-cocos2d-x 能让使用cocos2dx-lua项目开发者,更快捷的,更方便的开发!
需要注意的是quick-cocos2d-x的git可下载的zip是不全的,童鞋们需要通过git 来clone下来。500+MB
(Himi与quick-cocos2d-x作者交流中,在下个版本有可能quick-cocos2d-x会嵌入cocos2dx引擎中)
虚的不多说,本篇则是Himi从quick-cocos2d-x 中提取出来的一个Http框架供Lua使用,下面简单介绍下:
   (以下对于一些qucik-cocos2d-x中的http的框架封装和如何修改的不做解释,直接介绍如何使用!)
首先下载改版后的c++代码以及Himi对应封装好的pkg文件包 LuaHTTP.zip :
LuaHTTP  下载地址:http://vdisk.weibo.com/s/xg9U0  解压后将HNetWork文件夹并将其加入你们的项目, 解压后如下图:

然后将CCHTTPRequest.pkg 通过cocos2dx 引擎的tolua++ 工具binding到你项目的LuaCocos2d.cpp中(别忘记将这个pkg添加到Cocos2d.pkg中),并且在LuaCocos2d.h中添加:
#include "CCHTTPRequest.h"
然后,让Xcode,Build 下!OK 编译成功!
然后我们在lua中书写测试代码:
  1. --  GET
  2. local url = "www.baidu.com"
  3. local request =CCHTTPRequest:createWithUrlLua(
  4. function(event)
  5.     local request = event.request
  6.     print("state:"..request:getState().."  code:"..request:getResponseStatusCode())
  7.     local parseStr =  request:getResponseString()
  8.     print(parseStr)
  9. end,
  10. url,
  11. kCCHTTPRequestMethodGET)
  12. request:start()
复制代码

可能大家直接看上面不太清晰,OK,先看对应调用的CCHTTPRequest.h中的createWithUrlLua函数
  1. static CCHTTPRequest* createWithUrlLua(LUA_FUNCTION listener,
  2.                                            const char* url,
  3.                                            int method = kCCHTTPRequestMethodGET);
复制代码

函数第一个参数: lua函数 (用于接受到server数据后的回调用户处理数据)
函数第二个参数: 获取数据的url地址
函数第三个参数: http交互方式  GET or POST ,如下定义:
#define kCCHTTPRequestMethodGET  0
#define kCCHTTPRequestMethodPOST 1
看完以上的理解,那么反回头看lua的那几行测试代码,我想你也该很清楚了!
运行截图:


控制台输出的打印:


ok, 本篇就到这里!有任何问题,请及时留言讨论
  评论这张
 
阅读(121)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017