使用cocos2d-x的console实现远程调试

使用Lua开发有一个很爽的地方就是可以从控制台实时输入Lua指令来进行调试,但是之前该方法仅在windows下有效,之前也介绍过,见这里。研究了下发现cocos2d-x是有一个console类来支持远程调试的,哈哈,从此真机调试也可以很方便了。 这里先介绍下console的关键API先: listenOnTCP(number) 这里参数是监听的端口号 addCommand(tb, funciton) 这里第一个参数是一个表,内容如下:{name = "指令名", help = "指令介绍"},第二个参数就是执行的函数了,传入参数为(句柄,字符串参数)

在这里我将其封装到了cocos-lua里,函数如下: [cpp] 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 [/cpp] 建立监听过程如下: 1. 程序初始化时,调用API监听指定端口号,这里我们假设用端口号1234 [cpp] function GameMgr:_Init() … self:EnableListenOnTCP(1234) … end [/cpp] 2. 建立自己的Lua指令,这里我们只需要能接收我们输入的Lua指令并执行就好。(cocos-lua的框架已集成) [cpp] 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 [/cpp] 3. 在游戏主循环中查询并执行指令 [cpp] 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 [/cpp] 4. 启动你的App,同时在远程调试的电脑上命令行输入如下指令: [cpp]nc 设备IP地址 端口号[/cpp] 连接成功后,可以输入help,看到可用的指令,如fps on/off, debugmsg on/off等等,这里我们先打开控制台输出 [cpp]debugmsg on[/cpp] 输入刚才我们建立的指令: [cpp]lua print(“hello world”)[/cpp] 命令台上会出现“hello world”。 哈哈,大功告成,以后真机调试更方便啦^_^ **PS:以上功能均已集成到了cocos-lua中,只要初始化时监听自定义的端口就OK啦** 参考文章:http://www.cocoachina.com/cocos/20140704/9028.html