一个新手接触手游项目碰到的bug及解决过程汇总
来源:互联网 发布:庞培法布拉大学知乎 编辑:程序博客网 时间:2024/05/07 07:31
平台及开发引擎:w7,cocos2dx0.9x版本,基本为框架福州网龙传出来的。
开发项目:一款模仿放三和刀塔等手游的明星题材手游。
bug:在写邮件服务端接口时,由于消息长度在框架中定义为1k,但是因为需要添加邮件字段,所有字段长度组成的结构体超过了1k;导致了一个断点无法检查出来的的bug;栈被破坏。在发消息时显然不能把大于1k的结构体赋值给一个消息。
解决过程,断点调试,把报错的函数注释掉;进而把函数内报错的语句注释掉;找到确定的破坏栈的语句。
在声明一个结构体的时候,结构体不能正确的初始化。原因:在框架中有两个文件声明了结构体内字符串的长度,虽然手动修改了其中一个文件,但是考虑到引用不明确的关系。结果结构体初始化的时候出现了错误。
lua:local function pairsByKeys( t,f )--排序算法
--local a = {}
for n in pairs (t) do a[#a+1] = n end
table.sort(a,function(x,y) return t[x].dwMailId > t[y].dwMailId end)
local i = 0
return function()
i = i + 1
return a[i],t[a[i]]
end
end
for v in pairsByKeys( m_KindMail ) do --i=1,#m_KindMail do
……
这个书上写的范例实际上的的流程是每一次循环都会调用排序算法,实际上只要调用一次,再引用排序算法生成的table就可以了。
在手游项目中的中文编码为uft8,其编码方式为1-4个字节一个字符。若要对这种编码的字符串进行截取一定长度。需要对字符串进行解析:这里给出解析的方法(方法是从别处参考的)
local function chsize( char )
if not char then
return
elseif char >240 then
return 4
elseif char>225then
return 3
elseif char >192 then
return 2
else return 1
end
end
function utf8Format( str ) -- 将一个汉字转化为2个长度,一个汉字等于两个字母数字的宽度
local len = 0
local currentIndex = 1
while currentIndex <= #str do
local char = string.byte(str,currentIndex)
local x = chsize(char)
currentIndex = currentIndex + x
if x >= 2 then
len = len + 2
else
len = len + 1
end
end
return len
end
function utf8len( str )
local len = 0
local currentIndex = 1
while currentIndex <= #str do
local char = string.byte(str,currentIndex)
currentIndex = currentIndex +chsize(char)
len = len + 1
end
return len
end
-- 截取utf8 字符串
-- str: 要截取的字符串
-- startChar: 开始字符下标,从1开始
-- numChars: 要截取的字符长度
function utf8sub( str,startChar,numChars )
local startIndex = 1
while startChar>1 do
local char = string.byte(str,startIndex)
startIndex = startIndex + chsize(char)
startChar = startChar - 1
end
local currentIndex = startIndex
while numChars > 0 and currentIndex <= #str do
local char = string.byte(str,currentIndex)
currentIndex = currentIndex + chsize(char)
numChars = numChars - 1
end
return string.sub(str,startIndex,currentIndex - 1)
end
- 一个新手接触手游项目碰到的bug及解决过程汇总
- 一个新手接触手游项目碰到的bug及解决过程汇总2
- 项目中一个Bug的解决过程
- 解决 visualmark.vim 碰到的一个BUG
- WinCE7碰到的Bug汇总
- 一个bug的解决过程
- [转]解决 visualmark.vim 碰到的一个BUG
- 解决 visualmark.vim 碰到的一个BUG(E197)
- 一个C++新手碰到的
- 昨晚碰到的一个bug
- 记录下 初次接触驱动开发的过程 及碰到的问题
- 碰到一个0509-136错误的 的解决过程
- 一个小BUG的解决过程。
- 一个长时间parse的bug解决过程
- 新手Python上路 不断更新碰到的各类bug
- 使用Qstring时候碰到的一个bug
- 关于培训中碰到的一个Bug
- 一个新手接触EventBus
- 【JSP开发】response输出中文和数据的问题
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- android ViewParent requestDisallowInterceptTouchEvent 测试
- 怎样使网页页面变黑白
- 网站源码
- 一个新手接触手游项目碰到的bug及解决过程汇总
- 虚函数与虚继承寻踪
- opencv学习系列(六)--- 光流跟踪
- arcgis软件集合
- 执行make menuconfig 有许多错误
- linux quota命令参数及用法详解---linux磁盘配额限制设置和查看命令
- 0xcc,vc初始化堆栈的时候使用的数据
- 二分法应用--light oj1088 Points in Segments
- odoo更新方法