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

你可能感兴趣的:(Cocos2d-x)