首页 > 代码库 > Lua语言实现:截取给定字符串的部分长度,超出部分用省略号“...”替换
Lua语言实现:截取给定字符串的部分长度,超出部分用省略号“...”替换
在项目开发过程当中,尤其是游戏开发,当使用lua脚本语言编写客户端程序时,需要给玩家角色名长度做适配。如果玩家角色名的长度很长,超过了给定框,那么就会遮住游戏界面其他地方的图片,效果很难看,这样给玩家的体验就不好。为了给用户一个好的体验,往往策划会提出要求,比如角色名最大长度为18位,但是12位就已经超出框框,那么可以只显示9位,剩余部分用省略号替换,这样整个角色名就在给定框当中,给玩家的体验效果就更好。
下面是我在游戏开发遇到的情况。
没有修改前的情形:
策划往往会要求客户端把角色名缩短,但又不影响阅读。于是,截取角色名一部分字符,其余部分用省略号替换。
又由于游戏当中,很多模块界面都需要显示角色名称,所以,就考虑能否写一个公共函数GetShortName(),当一个模块界面需要显示角色名称,而角色名称超框时,直接调用这个函数GetShortName()就可以显示合适的角色名称。
以下是我在做游戏开发当中遇到的情形,我采用这种方法,先在公共方法函数GlobalDefine.lua中定义公共方法GetShortName(),给其他模块使用者调用,仅供参考。
函数定义如下:
--@brief 切割字符串,并用“...”替换尾部 --@param sName:要切割的字符串 --@return nMaxCount,字符串上限,中文字为2的倍数 --@param nShowCount:显示英文字个数,中文字为2的倍数,可为空 --@note function GetShortName(sName,nMaxCount,nShowCount) if sName == nil or nMaxCount == nil then return end local sStr = sName local tCode = {} local tName = {} local nLenInByte = #sStr local nWidth = 0 if nShowCount == nil then nShowCount = nMaxCount - 3 end for i=1,nLenInByte do local curByte = string.byte(sStr, i) local byteCount = 0; if curByte>0 and curByte<=127 then byteCount = 1 elseif curByte>=192 and curByte<223 then byteCount = 2 elseif curByte>=224 and curByte<239 then byteCount = 3 elseif curByte>=240 and curByte<=247 then byteCount = 4 end local char = nil if byteCount > 0 then char = string.sub(sStr, i, i+byteCount-1) i = i + byteCount -1 end if byteCount == 1 then nWidth = nWidth + 1 table.insert(tName,char) table.insert(tCode,1) elseif byteCount > 1 then nWidth = nWidth + 2 table.insert(tName,char) table.insert(tCode,2) end end if nWidth > nMaxCount then local _sN = "" local _len = 0 for i=1,#tName do _sN = _sN .. tName[i] _len = _len + tCode[i] if _len >= nShowCount then break end end sName = _sN .. "..." end return sName end然后在需要使用角色名称的模块界面SceneBattleSetment.lua文件调用这个GetShortName()函数:
--note sName为玩家的名字 local sName = WBattleGlobal:getCurrent():getHeroWithId(self.playerIds[index]).m_sPlayerName local ttfname1 = element:getChildElement("teammateName") assert(ttfname1, "ttfname is nil") local sShortName = GetShortName(sName,12,7) --调用函数显示合适角色名称 WZUILabelTTF:luaTo(ttfname1):setText(sShortName)调用后,效果如下:
其他地方类似,效果如下:
Lua语言实现:截取给定字符串的部分长度,超出部分用省略号“...”替换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。