今天我们来讨论一下手机游戏开发中的调试问题。与pc平台游戏和软件开发相比,手机上的游戏和软件开发要复杂得多。这是因为开发环境较为复杂,工具软件不够人性化等多方面的原因。
cocos2dx的出现解决了其中一个大问题,因为它是跨平台的。相对而言,Windows的软件开发环境更加友好,对中国程序员来说也更为熟悉。这样可以在Windows上进行日常开发和调试,然后在发布到其他平台时进行少量处理即可。
在Windows上调试cocos2dx程序,与端游类似,可以在后台窗口进行打印,也可以直接在Visual Studio中设置断点进行跟踪,相对来说还是比较容易的。唯一需要优化的就是将后台打印的日志导出,以便于根据日志进行分析。
然而,当在Windows环境下调试完成后,需要发布到Android平台时,问题就变得复杂了。如果运行顺利还好,一旦在运行过程中出现问题,重新调试就相当麻烦了。模拟器运行缓慢,Eclipse本身的支持也不够强大。有时候可能只是一句脚本报错,但要发现问题却需要费尽心力。如果是在真机上运行出错,那就更难跟踪问题了,还需要使用USB调试功能。今天的主要话题就是针对这种情况,提供几个有效的方法来方便我们进行游戏开发。
1、后台打印日志的优化。
在Windows上已经有后台日志查看功能,但大家可能会发现一个问题,后台显示有行数限制,超过一定行数后就看不到了,而cocos2dx的输出量是相当大的。解决方案就是输出到log文件。将后台显示的内容输出后,我们可以直接分析log文件。下面提供的是Lua的解决代码,C++用户可以自行改造。
首先,我们封装一下Lua的文件处理功能,比较简单,而且后面的方法可能也需要使用。
--file.lua--定义lua文件操作的方法--打开文件:参数(文件名,打开模式),返回文件句柄或nilfunction openFile(filename, mode) local f = io.open(filename,mode) if f then return f else return nil endend--读取文件全部内容:参数(文件句柄),返回一个stringfunction readAllFile(f)return f:read("*all")end
--读取文件一行内容:参数(文件句柄),返回一个stringfunction readLineFile(f)return f:read("*line")end
--写文件内容:参数(文件句柄,字符串)function writeFile(f, ...)local arg = {...}f:write(unpack(arg))end
--关闭文件,参数(文件句柄)function closeFile(f)f:close()end
然后,我们要改写print函数和cclog函数,将这些内容输出到文件。
local print_raw = print-- printprint = function(...)require "base.file"print_raw(string.format(...))local file = openFile("client.log", "a")if file thenwriteFile(file, string.format(...).."n")closeFile(file)endend-- cclogcclog = function(...)print(string.format(...))end
-- for CCLuaEngine tracebackfunction GTRACKBACK__(msg)print("----------------------------------------")print("LUA ERROR: " .. tostring(msg) .. "n")print(debug.traceback())print("----------------------------------------")end
这样,所有在Lua中的打印信息都会输出到日志文件中,方便我们进行分析。
白瓜面试
白瓜面试 – AI面试助手,辅助笔试面试神器
40 查看详情
2、上面这个方法已经能让我们共享日志了,那还有没有更好的方法呢?如果我在Android手机上运行,查看日志是不是很不方便呢?
那我们就更进一步。我们不是把日志输出到文件了吗?那我们直接在游戏中查看日志不是更方便吗?我们的思路是,在游戏中写一个日志显示界面,然后把日志文件的内容一行一行读出来,显示在一个RichText控件中。这样是不是更方便呢?这个方法我暂时没时间写,不过肯定没问题的,有时间写好后补上代码。
3、方法2已经能让我们及时看到日志了,我们还可以使用更强大一点的方法。我们可以建立一个日志服务器,客户端在输出日志时就发送到日志服务器,这样真机测试就很方便了,和在Windows开发时很相似了。不过这个方案有点重了,大家使用第二点应该就可以了。好了,上面推荐的这三种方案应该能解决大部分的调试问题了,再也不用为了看日志去启动麻烦的模拟器了。
一直没时间,今天才抽出时间来完善这个功能并将其加入到开发过程中。实现核心代码如下:
--日志控件self._richText = ui.RichTextUI:create()self._richText:setSize(cc.size(winSize.width - 60, winSize.height - 110))self._richText:setAnchorPoint(cc.p(0, 0))self._richText:setPosition(cc.p(30, 30))self._widget:addChild(self._richText)
local fHandle = openFile("client.log", "rb")if fHandle thenlocal idx = 0local lineStr = readLineFile(fHandle)while lineStr doif idx >= self._index thenlocal elem = ui.RichItemText:create(0, Color3B.WHITE, 255, strg2u(lineStr), DEFAULT_FONT_TTF, 20)self._richText:insertElement(elem)self._richText:insertNewLine()endidx = idx + 1lineStr = readLineFile(fHandle)endself._index = idxend
下面看看实际的效果吧,对于真机测试来说,这个效果是不是已经很好了呢?
转载请注明出处:帘卷西风的专栏(https://www.php.cn/link/0197fd56abb69bf33e16d0abdc2a439f)
以上就是关于cocos2dx程序的BUG调试解决方案的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/588369.html
微信扫一扫
支付宝扫一扫