使用Lua开发有一个很爽的地方就是可以从控制台实时输入Lua指令来进行调试,但是之前该方法仅在windows下有效,之前也介绍过,见这里。研究了下发现cocos2d-x是有一个console类来支持远程调试的,哈哈,从此真机调试也可以很方便了。
这里先介绍下console的关键API先:
listenOnTCP(number) 这里参数是监听的端口号
addCommand(tb, funciton) 这里第一个参数是一个表,内容如下:{name = "指令名", help = "指令介绍"},第二个参数就是执行的函数了,传入参数为(句柄,字符串参数)
在这里我将其封装到了cocos-lua里,函数如下:
function GameMgr:EnableListenOnTCP(port_number) return cc.Director:getInstance():getConsole():listenOnTCP(port_number) end function GameMgr:AddConsoleCommand(name, help, call_back) return cc.Director:getInstance():getConsole():addCommand({name = name, help = help}, call_back) end |
建立监听过程如下:
1. 程序初始化时,调用API监听指定端口号,这里我们假设用端口号1234
function GameMgr:_Init() ... self:EnableListenOnTCP(1234) ... end |
2. 建立自己的Lua指令,这里我们只需要能接收我们输入的Lua指令并执行就好。(cocos-lua的框架已集成)
function InsertConsoleCmd(cmd_string) wait_execute_cmd_string = cmd_string end function GameMgr:Init() ... local function executeCmd(handler, cmd_string) InsertConsoleCmd(cmd_string) end self:AddConsoleCommand( "lua" , "Execute a Lua Command String." , executeCmd) ... end |
3. 在游戏主循环中查询并执行指令
local function ExecuteCmdString(cmd_string) if cmd_string then local cmd_func = loadstring(cmd_string) if cmd_func then xpcall(cmd_func, __G__TRACKBACK__) else cclog( "Invalid CMD! %s" , cmd_string) end end end local function MainLoop(delta) ... if wait_execute_cmd_string then ExecuteCmdString(wait_execute_cmd_string) wait_execute_cmd_string = nil end ... end |
4. 启动你的App,同时在远程调试的电脑上命令行输入如下指令:
连接成功后,可以输入help,看到可用的指令,如fps on/off, debugmsg on/off等等,这里我们先打开控制台输出
输入刚才我们建立的指令:
命令台上会出现“hello world”。
哈哈,大功告成,以后真机调试更方便啦~~^_^
PS:以上功能均已集成到了cocos-lua中,只要初始化时监听自定义的端口就OK啦~~
参考文章:http://www.cocoachina.com/cocos/20140704/9028.html