一个新手接触手游项目碰到的bug及解决过程汇总
2015-01-30 11:30
387 查看
平台及开发引擎: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:在写邮件服务端接口时,由于消息长度在框架中定义为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及解决过程汇总2
- 项目中一个Bug的解决过程
- 一直以来我(每个从事linux开发的人)深受“bug”的困扰,好像“bug”不足以描述这种被问题困扰的无奈。因为当在驱动或BSP的开发过程中,所碰到的问题比解决一个bug难得多。 Li
- XX省移动CMNET三期扩容项目遇到IPMP BUG解决过程
- 开发过程碰到的一个bug
- springmvc项目搭建过程中遇到的BUG及其解决方法
- 解决工作中遇到的一个"打开,保存"文件框的bug的过程
- [转]解决 visualmark.vim 碰到的一个BUG
- 一个小BUG的解决过程。
- 一个长时间parse的bug解决过程
- J2EE Web项目Tomcat跑不起来的一些问题解决过程汇总
- 碰到一个0509-136错误的 的解决过程
- eclipse maven创建一个maven web项目,以及创建过程中的报错解决方法
- 项目调试时候,出现其中用到的一个组件“访问被拒绝”的解决方法(.net的一个BUG)
- 写项目的过程,遇见的BUG,如何解决的
- 一个疑难bug的解决过程
- Java项目中超时问题解决方案汇总--解决cxf 时间 等待问题 bug~~~~
- 解决 visualmark.vim 碰到的一个BUG
- SSH 项目过程中遇到的问题和解决方法汇总 struts2 spring hibernate
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误