今天我们来讨论一下手机游戏开发中的调试问题。与pc平台游戏和软件开发相比,手机上的游戏和软件开发要复杂得多。这是因为开发环境较为复杂,工具软件不够人性化等多方面的原因。
cocos2dx的出现解决了其中一个大问题,因为它是跨平台的。相对而言,Windows的软件开发环境更加友好,对中国程序员来说也更为熟悉。这样可以在Windows上进行日常开发和调试,然后在发布到其他平台时进行少量处理即可。
在Windows上调试cocos2dx程序,与端游类似,可以在后台窗口进行打印,也可以直接在Visual Studio中设置断点进行跟踪,相对来说还是比较容易的。唯一需要优化的就是将后台打印的日志导出,以便于根据日志进行分析。
然而,当在Windows环境下调试完成后,需要发布到Android平台时,问题就变得复杂了。如果运行顺利还好,一旦在运行过程中出现问题,重新调试就相当麻烦了。模拟器运行缓慢,Eclipse本身的支持也不够强大。有时候可能只是一句脚本报错,但要发现问题却需要费尽心力。如果是在真机上运行出错,那就更难跟踪问题了,还需要使用USB调试功能。今天的主要话题就是针对这种情况,提供几个有效的方法来方便我们进行游戏开发。
1、后台打印日志的优化。
在Windows上已经有后台日志查看功能,但大家可能会发现一个问题,后台显示有行数限制,超过一定行数后就看不到了,而cocos2dx的输出量是相当大的。解决方案就是输出到log文件。将后台显示的内容输出后,我们可以直接分析log文件。下面提供的是Lua的解决代码,C++用户可以自行改造。
首先,我们封装一下Lua的文件处理功能,比较简单,而且后面的方法可能也需要使用。
--file.lua--定义lua文件操作的方法--打开文件:参数(文件名,打开模式),返回文件句柄或nil
function openFile(filename, mode)
local f = io.open(filename,mode)
if f then
return f
else
return nil
end
end
<p>--读取文件全部内容:参数(文件句柄),返回一个string
function readAllFile(f)
return f:read("*all")
end</p><p>--读取文件一行内容:参数(文件句柄),返回一个string
function readLineFile(f)
return f:read("*line")
end</p><p>--写文件内容:参数(文件句柄,字符串)
function writeFile(f, ...)
local arg = {...}
f:write(unpack(arg))
end</p><p>--关闭文件,参数(文件句柄)
function closeFile(f)
f:close()
end然后,我们要改写print函数和cclog函数,将这些内容输出到文件。
local print_raw = print-- print
print = function(...)
require "base.file"
print_raw(string.format(...))
local file = openFile("client.log", "a")
if file then
writeFile(file, string.format(...).."\n")
closeFile(file)
end
end</p><p>-- cclog
cclog = function(...)
print(string.format(...))
end</p><p>-- for CCLuaEngine traceback
function <strong>G</strong>TRACKBACK__(msg)
print("----------------------------------------")
print("LUA ERROR: " .. tostring(msg) .. "\n")
print(debug.traceback())
print("----------------------------------------")
end这样,所有在Lua中的打印信息都会输出到日志文件中,方便我们进行分析。
传统驾校预约方式步骤繁琐,效率低下,随着移动互联网科技和5G的革新,驾校考试领域迫切需要更加简洁、高效的预约方式,便捷人们的生活。因此设计基于微信小程序的驾校预约系统,改进传统驾校预约方式,实现高效的驾校学校预约。 采用腾讯提供的小程序云开发解决方案,无须服务器和域名。驾校预约管理:开始/截止时间/人数均可灵活设置,可以自定义客户预约填写的数据项驾校预约凭证:支持线下到场后校验签到/核销/二维码自
0
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 then
local idx = 0
local lineStr = readLineFile(fHandle)
while lineStr do
if idx >= self._index then
local elem = ui.RichItemText:create(0, Color3B.WHITE, 255, strg2u(lineStr), DEFAULT_FONT_TTF, 20)
self._richText:insertElement(elem)
self._richText:insertNewLine()
end
idx = idx + 1
lineStr = readLineFile(fHandle)
end
self._index = idx
end下面看看实际的效果吧,对于真机测试来说,这个效果是不是已经很好了呢?
转载请注明出处:帘卷西风的专栏(https://www.php.cn/link/0197fd56abb69bf33e16d0abdc2a439f)
以上就是关于cocos2dx程序的BUG调试解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号