自己制作一个 CoCos2dx 错误信息框界面
在调试cocos项目的时候对代码的错误提示,我们通常会在 调试窗里面去查看,但是如果有些不太影响的错误可能不易看到,我们可以制作一个 Debug 窗口来捕获 并显示在 游戏里面,这样就比较直观了.下面我们来制作:
- 首先我们需要创建一个类来初始化一个捕获窗口:创建一个 DebugWin 如下:
local DebugWin = class("DebugWin", function ()
local layer = cc.LayerColor:create(cc.c4b(10,10,10,204))
return layer
end)
function DebugWin:ctor(msg)
cc.Director:getInstance():pause()
local msg = string.sub(msg, 1, 1000)
local size = cc.Director:getInstance():getWinSize()
self:setLocalZOrder(100000)
local msgText = ccui.Text:create(msg,nil,20)
msgText:setTextAreaSize(cc.size(650,500))
msgText:setTextHorizontalAlignment(cc.TEXT_ALIGNMENT_LEFT)
msgText:setTextVerticalAlignment(cc.VERTICAL_TEXT_ALIGNMENT_CENTER)
msgText:setPosition(size.width * 0.5, size.height * 0.5 + 20)
self:addChild(msgText)
local closeBtn = ccui.Layout:create()
closeBtn:setContentSize(cc.size(130,40))
closeBtn:setBackGroundColorType(1)
closeBtn:setBackGroundColor(cc.c3b(200,0,0))
closeBtn:setPosition(cc.p(size.width / 2 - 65, 80))
self:addChild(closeBtn)
local label = ccui.Text:create("确定",nil,25)
label:setPosition(65,20)
closeBtn:addChild(label)
closeBtn:setTouchEnabled(true)
closeBtn:addTouchEventListener(function(sender, state)
if state == ccui.TouchEventType.ended then
self:removeFromParent()
cc.Director:getInstance():resume()
end
end)
end
return DebugWin
- 在cocos 的 init.lua 文件里面 将捕获的error信息添加到我们的窗口上面去.修改如下:
__G__TRACKBACK__ = function(msg)
local msg = debug.traceback(msg, 3)
print(msg)
if DEBUG > 1 then
local test = require "DebugWin"
test = test.new(msg)
local scene = display:getRunningScene()
if tolua.isnull(scene) then
scene = cc.Scene:create()
display.runScene(scene)
end
scene:addChild(test,99999)
end
return msg
end
3. 运行后的结果如下,这样调试起来如果游戏有报错,就比较直观了.