初次研究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", )
collectgarbage("setstepmul", ) local cclog = function(...)
print(string.format(...))
end require "hello2"
cclog("result is " .. myadd(, )) --------(后面代码非重点,忽略。。。)-------
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