为了使游戏开发更加方便快捷,我继续了protobuf在lua下的尝试。
socket使用的是cocos2dx集成的websocket。
先说下环境:cocos2d-x-2.2.1 + protobuf 2.5.0 +protoc-gen-lua +Python 2.7.5
1.在protobuf目录下依次执行如下命令
python setup.py build
python setup.py install
2.在protoc-gen-lua目录下的plugin目录中新建protoc-gen-lua.bat文件,并将如下内容粘贴到里面
@python <你的目录>\protoc-gen-lua\plugin\protoc-gen-lua
3.生成protobuf对应的lua文件,执行如下命令:
<你的路径>/protoc.exe --lua_out=./ --plugin=protoc-gen-lua="<你的路径>\protoc-gen-lua\plugin\protoc-gen-lua.bat" test.proto
执行完后就会生成test_pb.lua文件。
4.使用cocos2dx的create_project.py创建lua工程;
5.将protoc-gen-lua/protobuf目录下的pb.c文件复制到lua工程的Classes目录下,并加入到C++工程中;
6.将protoc-gen-lua/protobuf目录下的所有lua文件复制到lua工程的Resources目录下;
7.编辑AppDelegate.cpp文件,添加如下代码:
extern "C"{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
int luaopen_pb (lua_State *L);
}
8.在AppDelegate::applicationDidFinishLaunching()方法中加入初始化方法:
luaopen_pb(tolua_s);
9.此时对lua工程进行编译,如果出错,请检查并修正;编译通过,并且可以正常运行后继续下面的步骤;
10.cocos2dx默认产生的lua工程包含2个文件hello.lua与hello2.lua,打开hello2.lua,将如下内容添加到文件末尾(因为我使用的是websocket,各位可根据自己的实际情况进行修改):
local wsProtobuf=nil
function testProtobuf()
wsProtobuf = WebSocket:create("ws://localhost:8080/web")
local function onOpen(strData)
print("socket open ...")
require "test_pb"
local msg=test_pb.Message()
msg.id=101
local person =test_pb.Person()
person.id=111
person.name="user1"
person.email="a1@a.a"
msg.data=person:SerializeToString()
local pb_data = msg:SerializeToString()
local t={string.byte(pb_data,1,-1)}
wsProtobuf:sendBinaryMsg(t,table.getn(t))
end
local function onMessage(strData)
print("socket message ...")
end
local function onClose(strData)
print("socket close ...")
end
local function onError(strData)
print("socket error")
end
if nil ~= wsProtobuf then
wsProtobuf:registerScriptHandler(onOpen,kWebSocketScriptHandlerOpen)
wsProtobuf:registerScriptHandler(onMessage,kWebSocketScriptHandlerMessage)
wsProtobuf:registerScriptHandler(onClose,kWebSocketScriptHandlerClose)
wsProtobuf:registerScriptHandler(onError,kWebSocketScriptHandlerError)
end
end
11.然后在hello.lua中调用testProtobuf()函数即可。
测试运行,你可以在服务器端查看收到的消息。
分享到:
相关推荐
由于项目使用了protobuf,运行该Demo的前提是把protobuf集成到你的开发软件里。 该例子封装好了在quick cocos-2d lua 中基于luaSocket和protobuf的网络通信。
可以快速解出cocos-lua, quick-cocos引擎使用xxtea加密的lua与zip文件。对luajit编译过的bytecode毫无办法。 资源来自吾爱破解论坛,作者ID:skyxiaoyu。感谢作者的分享
其中配置包括了cocos2dx 2.0.4和cocos2dx2.1.3在lua中所有函数,类,类的成员变量和方法以及相关枚举定义 使用方法: 1.打开本目录下LuaKeywords.config,将里面内容复制到LuaStudio的自定义函数配置中 2.拷贝cocos...
cocos2dx_lua使用c++cocos2dx_lua使用c++
cocos2dx lua 解密工具xxtea_decrypt,非常好用,直接就可以反编译出来
用vsdoe开发cocos2dx-lua的辅助文件,用于代码提示,提高代码效率。一并提交了制作脚本。 cocos2dx-lua,vscode代码提示文件,附带制作脚本
Cocos2dx游戏 虚拟摇杆 实现 lua版
cocos2dx lua绑定,基于tolua++、Python工具实现cococs2dx环境下的lua脚本绑定。
该笔记纯属我个人在实际开发中积累的,非网上直接复制粘贴,其中包括一些隐蔽bug解决方案,希望对相关游戏开发人员有所帮助。
cocos2dx lua debug的插件,可以断点lua,看堆栈信息,单步调试lua。 解压后,先安装BabeLua For 2015 V3.2.2.0.vsix,再安装babelua-compat-1.06-VS2015
这个扩展是一个轻量级的 MVC 框架,是为了开发移动游戏,结合使用 cocos2d-x 框架而开发一个轻量级的框架。 什么是 MVCS? - M 就是 Model 层,存储数据的地方,只提供2种接口,gets 和 sets 接口。 - V 就是 View ...
cocos2dx-lua Dragonbones龙骨C++方法lua-binding文件,lua_cocos2dx_dragonbones_auto.hpp,lua_cocos2dx_dragonbones_auto.cpp
该文档详细说明了如何自定cocos2dx-lua(quick) C++接口并导出接口供lua端调用,从环境配置,文件编译,接口测试,平台(Android和Ios)编译一步一步进行详细说明,按照文档一步步操作就能生成你想要的C++接口,简单...
cocos2dx +lua 斜45度A星寻路算法 lua实现 使用 Astar:getInstance():InitAstar(阻挡数组,地图宽,地图高) Astar:getInstance():GetPath(起点,终点,true) 返回路径点
cocos2d-lua 实现富文本
cocos2dx引擎 lua实现 益智类游戏,《蜗牛回家》。仅作学习参考!
由于luaforwindows编辑器本身没有内置cocos2dx的api接口,所以我只做了一个,共大家使用。使用方法:把附件中两个配置文件覆盖掉scite根目录中的对应文件即可。
cocos2dx-lua 自定义事件类
使用_cocos2d-x_和_Lua_快速开发游戏.pdf