cocos2dx使用lua和protobuf
2015-05-26 14:54
351 查看
为了使游戏开发更加方便快捷,我继续了protobuf在lua下的尝试。
socket使用的是cocos2dx集成的websocket。
先说下环境:cocos2d-x-2.2.1 + protobuf 2.5.0 + protoc-gen-lua + Python 2.7.5
1.在protobuf目录下依次执行如下命令
[plain]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
python setup.py build
python setup.py install
2.在protoc-gen-lua目录下的plugin目录中新建protoc-gen-lua.bat文件,并将如下内容粘贴到里面
[plain]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
@python <你的目录>\protoc-gen-lua\plugin\protoc-gen-lua
3.生成protobuf对应的lua文件,执行如下命令:
[plain]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<你的路径>/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文件,添加如下代码:
[cpp]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
extern "C"{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
int luaopen_pb (lua_State *L);
}
8.在AppDelegate::applicationDidFinishLaunching()方法中加入初始化方法:
[cpp]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
luaopen_pb(tolua_s);
9.此时对lua工程进行编译,如果出错,请检查并修正;编译通过,并且可以正常运行后继续下面的步骤;
10.cocos2dx默认产生的lua工程包含2个文件hello.lua与hello2.lua,打开hello2.lua,将如下内容添加到文件末尾(因为我使用的是websocket,各位可根据自己的实际情况进行修改):
[javascript]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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()函数即可。测试运行,你可以在服务器端查看收到的消息。
socket使用的是cocos2dx集成的websocket。
先说下环境:cocos2d-x-2.2.1 + protobuf 2.5.0 + protoc-gen-lua + Python 2.7.5
1.在protobuf目录下依次执行如下命令
[plain]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
python setup.py build
python setup.py install
2.在protoc-gen-lua目录下的plugin目录中新建protoc-gen-lua.bat文件,并将如下内容粘贴到里面
[plain]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
@python <你的目录>\protoc-gen-lua\plugin\protoc-gen-lua
3.生成protobuf对应的lua文件,执行如下命令:
[plain]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
<你的路径>/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文件,添加如下代码:
[cpp]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
extern "C"{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
int luaopen_pb (lua_State *L);
}
8.在AppDelegate::applicationDidFinishLaunching()方法中加入初始化方法:
[cpp]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
luaopen_pb(tolua_s);
9.此时对lua工程进行编译,如果出错,请检查并修正;编译通过,并且可以正常运行后继续下面的步骤;
10.cocos2dx默认产生的lua工程包含2个文件hello.lua与hello2.lua,打开hello2.lua,将如下内容添加到文件末尾(因为我使用的是websocket,各位可根据自己的实际情况进行修改):
[javascript]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
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()函数即可。测试运行,你可以在服务器端查看收到的消息。
相关文章推荐
- cocos2dx使用lua和protobuf
- cocos2dx使用lua和protobuf
- cocos2dx 3.x以上版本 lua中使用protobuf
- cocos2dx使用lua和protobuf
- cocos2dx引擎中lua使用加密sqlite数据库
- cocos2dx LUA使用ClippingNode来制作新手引导
- cocos2dx-lua 在cocos2d中使用lua脚本进行开发,并介绍脚本在游戏中的详细用途
- cocos2dx是怎么使用lua引擎的
- 使用cocos2dx+lua改造《剑魂之刃》的经验总结
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
- 【COCOS2DX-LUA 脚本开发之九】使用cocos2dx-LuaProxy便捷Lua项目快速使用cocos2dx引擎extensions扩展包
- cocos2dx lua图集的使用
- 如何在cocos2dx中使用Lua创建自定义
- 对cocos2dx lua中http请求的简要封装和使用
- 【COCOS2DX-LUA 脚本开发之八】使用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http网络交互!
- 转载一个简单的lua展示【COCOS2DX-LUA 脚本开发之一】LUA语言基础在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
- 【Cocos2dX(2.x)_Lua开发之三】★重要必看篇★在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- 【cocos2dx开发技巧5】脚本lua的使用--代码集锦
- cocos2dx 2.x版本:简化提炼tolua++绑定自定义类到lua中使用