cocos2d-x的helloLua例子函数名定义误导初学者

初次研究cocos2d-x,

cocos2d-x支持lua是一个很不错的功能,使用lua来开发有个最大的好处就是不用每次改了游戏代码都编译,大多数情况下改了脚本直接运行程序就可以了,发布更新时也不用更新主程序。

同时也有个弊端,就是有能像vc那样加断点,所以为了debug方便,仅仅用控制台输出是不够的,如果能把日志保存下来并且有颜色区分,信息过略自然更好。

我的想法是用debugview来捕获cocos2d-x项目的debug信息。。

于是今天就研究了一下HelloLua这个例子,它是用控制台输出信息的,显示不能满足我的要求。。有没有办法通过lua的调用打印debug信息呢?

打开"..\samples\Lua\HelloLua\Resources"下的hello.lua文件

-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
    print("----------------------------------------")
    print("LUA ERROR: " .. tostring(msg) .. "\n")
    print(debug.traceback())
    print("----------------------------------------")
end

local function main()
    -- avoid memory leak
    collectgarbage("setpause", 100)
    collectgarbage("setstepmul", 5000)

    local cclog = function(...)
        print(string.format(...))
 end
require "hello2" cclog("result is " .. myadd(3, 5)) --------(后面代码非重点,忽略。。。)-------
end xpcall(main, __G__TRACKBACK__)

发现控制台里面的信息是用cclog来输出的,可是我怎么用debugview捕获不了呢?

找了许久,找到了cocos2d-x和lua的关键字映射源码“\scripting\lua\cocos2dx_support\LuaCocos2d.cpp”,搜索了一下,只搜到了"CCLuaLog"函数,怎么都搜不到cclog。。

用CCLuaLog在lua里面试了一下,可以捕获到debug信息,可为什么用cclog不行呢?在vc里面试一下cclog也是可以捕获到的。。

这时我怀疑lua里面调用的cclog可能是重写过的,因为CCLuaLog不支持"..."参数,正在百思不解的时候,我又重新仔细看了一下hello.lua脚本,这时才发现我犯傻了。。

 local cclog = function(...)
       print(string.format(...))
end

其实cclog只是在lua里面自定义的输出函数。。。只是把名字取为cclog,我的个去。。。

如果想要输出debug信息,只是需要把这段代码改为如下代码即可:

local cclog = function(...)
    CCLuaLog("cocos2dx-->"..string.format(...))
end

 

posted @ 2013-08-07 17:02  elephant-x  阅读(1446)  评论(1编辑  收藏  举报