使用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

发表评论

电子邮件地址不会被公开。