【COCOS2DX-LUA 脚本开发之八】使用QUICK-COCOS2D-X或COCOS2DX-LUAPROXY的LUA框架实现LUA-HTTP网络交互!

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/lua-game/1314.html

     利用 cocos2dx-LuaProxy 也可以来实现lua版http功能,具体请移步到:【COCOS2DX-LUA 脚本开发之九】使用cocos2dx-LuaProxy便捷Lua项目快速使用cocos2dx引擎extensions扩展包

 

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

 

 

至于如何使用,Himi这里不再详细叙述,大家可以看引擎提供的例子中自己阅读学习(TestCpp项目中)

有童鞋就会问了,既然cocos2dx都已经为我们封装好了,那还讲什么? – -。

嗯,是的,我们可以通过将这几个类通过tolua++工具binding到lua中供我们来使用,但是!一般我们访问服务器时,都希望数据返回时调用我们的一个方法进行对数据的处理,那么使用CCHttpClient 我们可以通过HttpRequest请求包的时候,对其进行设置其回调函数,如下:

1

2

3

4

5

6

7

8

9

10

  inline void setResponseCallback(CCObject* pTarget, SEL_CallFuncND pSelector)

    {

        _pTarget = pTarget;

        _pSelector = pSelector;

 

        if (_pTarget)

        {

            _pTarget->retain();

        }

    }

大家可以看到此函数需要一个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中添加:

1

#include "CCHTTPRequest.h"

然后,让Xcode,Build 下!OK 编译成功!

然后我们在lua中书写测试代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

           --  GET

        local url = "www.baidu.com"

        local request =CCHTTPRequest:createWithUrlLua(

 

        function(event)

            local request = event.request

            print("state:"..request:getState().."  code:"..request:getResponseStatusCode())

            local parseStr =  request:getResponseString()

            print(parseStr)

 

        end,

        url,

        kCCHTTPRequestMethodGET)

        request:start()

可能大家直接看上面不太清晰,OK,先看对应调用的CCHTTPRequest.h中的createWithUrlLua函数:

1

2

3

static CCHTTPRequest* createWithUrlLua(LUA_FUNCTION listener,

                                           const char* url,

                                           int method = kCCHTTPRequestMethodGET);

 

函数第一个参数: lua函数 (用于接受到server数据后的回调用户处理数据)

函数第二个参数: 获取数据的url地址

函数第三个参数: http交互方式  GET or POST ,如下定义:

#define kCCHTTPRequestMethodGET  0

#define kCCHTTPRequestMethodPOST 1

看完以上的理解,那么反回头看lua的那几行测试代码,我想你也该很清楚了!

运行截图:

 

控制台输出的打印:

 

ok, 本篇就到这里!有任何问题,请及时留言讨论。

时间: 2024-10-27 00:17:17

【COCOS2DX-LUA 脚本开发之八】使用QUICK-COCOS2D-X或COCOS2DX-LUAPROXY的LUA框架实现LUA-HTTP网络交互!的相关文章

【COCOS2DX-LUA 脚本开发之四】使用TOLUA++编译PKG,从而创建自定义类让LUA脚本使用

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/lua-game/1259.html 此篇基本[COCOS2DX(2.X)_LUA开发之三]在LUA中使用自定义精灵(LUA脚本与自创建类之间的访问)及LUA基础讲解 在Lua第三篇中介绍了,如何在cocos2dx中使用Lua创建自定义类供Lua脚本调用使用,当时出于Himi对Lua研究不够深入,所以当时使用了笨方法手动添加的方式进行的,那么

【COCOS2DX(2.X)_LUA开发之三】在LUA中使用自定义精灵(LUA脚本与自创建类之间的访问)及LUA基础讲解

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/lua-game/985.html 本篇做起来比较累,大家请参考最新篇[COCOS2DX-LUA 脚本开发之四]使用tolua++编译pkg,从而创建自定义类让Lua脚本使用 此篇可能会在最新的cocos2dx版本中出现如下问题: 1 2 LUA ERROR: ...24F82-1230-41FE-8A04-C445FB7D1BAB/mtet

《Lua游戏AI开发指南》一2.7 创建一个沙箱Lua脚本

2.7 创建一个沙箱Lua脚本 基本的沙箱程序就位之后,我们就可以新建沙箱的创建Lua脚本了.首先在脚本文件夹中新建一个Sandbox.lua脚本. 像下面这样创建一个Lua文件: src/my_sandbox/script/Sandbox.lua 沙箱Lua脚本必须实现4个全局函数供C++代码调用,它们分别是Sandbox_Cleanup. Sandbox_HandleEvent. Sandbox_Initialize和Sandbox_Update: Sandbox.lua: function

《Lua游戏AI开发指南》一2.9 创建智能体Lua脚本

2.9 创建智能体Lua脚本 为了创建一个新的智能体,我们需要创建另一个Lua脚本并实现Agent_Cleanup. Agent_HandleEvent. Agent_Initialize和Agent_Update函数. 创建一个Lua文件如下: src/my_sandbox/script/Agent.lua Agent.lua: function Agent_Cleanup(agent) end function Agent_HandleEvent(agent, event) end func

【COCOS2DX-LUA 脚本开发之十四】解决自定义CPP类通过TOLUA++ BINDING LUACOCOS2D后编译到ANDROID运行黑屏(没有调用自定义CPP类)的问题!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/lua-game/1388.html 唉,首先说点闲话 – -.Himi搞了不短的时间,这个问题一直没有解决,最后终于在张大(cocos2dx引擎开发者之一 张小明)的指导下解决了此问题. 本章基于上一篇  [COCOS2DX-LUA 脚本开发之十三]  与之前的项目整合 [Cocos2d-X(2.x) 游戏开发系列之二]cocos2dx最新

阿里云Redis LUA脚本功能上线——轻量嵌入,极速扩展,业务轻松跨平台

    阿里云Redis云数据库,全面支持LUA脚本功能,助力企业轻松迁移自建Redis数据库的业务逻辑,实现业务的跨平台复用,快速驱动业务上云.LUA语言作为目前最流行的轻量级嵌入式脚本语言,凭借其语法简单.高效稳定.支持复杂数据结构以及自动内存管理等特点,已经在众多著名的游戏程序中大量被使用,如:愤怒的小鸟.星际争霸.魔兽世界等. 了解Redis详细配置及价格>> Redis支持LUA脚本的主要优势      LUA脚本的融合将使Redis数据库产生更多的使用场景,迸发更多新的优势: 高效

简介Lua脚本与Redis数据库的结合使用_Redis

 可能你已经听说过Redis 中嵌入了脚本语言,但是你还没有亲自去尝试吧?  这个入门教程会让你学会在你的Redis 服务器上使用强大的lua语言.Hello, Lua! 我们的第一个Redis Lua 脚本仅仅返回一个字符串,而不会去与redis 以任何有意义的方式交互. 复制代码 代码如下: local msg = "Hello, world!" return msg 这是非常简单的,第一行代码定义了一个本地变量msg存储我们的信息, 第二行代码表示 从redis 服务端返回msg

redis4.0之Lua脚本新姿势

前言 Redis内嵌了Lua环境来支持用户扩展功能,但是出于数据一致性考虑,要求脚本必须是纯函数的形式,也就是说对于一段Lua脚本给定相同的参数,写入Redis的数据也必须是相同的,对于随机性的写入Redis是拒绝的. 从Redis 3.2开始Lua脚本支持随机性写入,最近在总结4.0的新特性,索性就都归到4.0里,方便查阅. Redis中的Lua脚本 1. Lua脚本简介 在Redis中使用Lua脚本不可避免的要用到以下三个命令:EVAL.EVALSHA和SCRIPT,下面我们来简单介绍一下:

【COCOS2DX-LUA 脚本开发之十三】解决COCOS2DX-LUA编译到ANDROID找不到CCLUAENGINE、HELLOWORLD或出现GET DATA FROM FILE(XXX.LUA) FAILED/CAN NOT GET FILE DATA OF XXX.LUA、COCOS2DX

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/lua-game/1368.html 对于跨平台整合,Himi已经写了1.x 与 2.x 的了,还不知道如何整合的请移步到 [Cocos2d-X(2.x) 游戏开发系列之二]cocos2dx最新2.x版本跨平台整合NDK+Xcode,Xcode编写&编译代码,Android导入打包运行即可!) 本篇只是解决在整合cocos2dx-lua项目会