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

使用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,同时在远程调试的电脑上命令行输入如下指令:

nc 设备IP地址 端口号

连接成功后,可以输入help,看到可用的指令,如fps on/off, debugmsg on/off等等,这里我们先打开控制台输出

debugmsg on

输入刚才我们建立的指令:

lua print("hello world")

命令台上会出现“hello world”。

哈哈,大功告成,以后真机调试更方便啦~~^_^

PS:以上功能均已集成到了cocos-lua中,只要初始化时监听自定义的端口就OK啦~~

参考文章:http://www.cocoachina.com/cocos/20140704/9028.html

发表评论

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