一个新手接触手游项目碰到的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

0 0
原创粉丝点击