Lua语言实现:截取给定字符串的部分长度,超出部分用省略号“...”替换
2014-11-15 16:27
411 查看
在项目开发过程当中,尤其是游戏开发,当使用lua脚本语言编写客户端程序时,需要给玩家角色名长度做适配。如果玩家角色名的长度很长,超过了给定框,那么就会遮住游戏界面其他地方的图片,效果很难看,这样给玩家的体验就不好。为了给用户一个好的体验,往往策划会提出要求,比如角色名最大长度为18位,但是12位就已经超出框框,那么可以只显示9位,剩余部分用省略号替换,这样整个角色名就在给定框当中,给玩家的体验效果就更好。 下面是我在游戏开发遇到的情况。没有修改前的情形:策划往往会要求客户端把角色名缩短,但又不影响阅读。于是,截取角色名一部分字符,其余部分用省略号替换。又由于游戏当中,很多模块界面都需要显示角色名称,所以,就考虑能否写一个公共函数GetShortName(),当一个模块界面需要显示角色名称,而角色名称超框时,直接调用这个函数GetShortName()就可以显示合适的角色名称。以下是我在做游戏开发当中遇到的情形,我采用这种方法,先在公共方法函数GlobalDefine.lua中定义公共方法GetShortName(),给其他模块使用者调用,仅供参考。函数定义如下:<span style="font-size:18px;"><span style="color:#33CC00;">--@brief 切割字符串,并用“...”替换尾部--@param sName:要切割的字符串--@return nMaxCount,字符串上限,中文字为2的倍数--@param nShowCount:显示英文字个数,中文字为2的倍数,可为空--@note 函数实现:截取字符串一部分,剩余用“...”替换</span>function GetShortName(sName,nMaxCount,nShowCount)if sName == nil or nMaxCount == nil thenreturnendlocal sStr = sNamelocal tCode = {}local tName = {}local nLenInByte = #sStrlocal nWidth = 0if nShowCount == nil thennShowCount = nMaxCount - 3endfor i=1,nLenInByte dolocal curByte = string.byte(sStr, i)local byteCount = 0;if curByte>0 and curByte<=127 thenbyteCount = 1elseif curByte>=192 and curByte<223 thenbyteCount = 2elseif curByte>=224 and curByte<239 thenbyteCount = 3elseif curByte>=240 and curByte<=247 thenbyteCount = 4endlocal char = nilif byteCount > 0 thenchar = string.sub(sStr, i, i+byteCount-1)i = i + byteCount -1endif byteCount == 1 thennWidth = nWidth + 1table.insert(tName,char)table.insert(tCode,1)elseif byteCount > 1 thennWidth = nWidth + 2table.insert(tName,char)table.insert(tCode,2)endendif nWidth > nMaxCount thenlocal _sN = ""local _len = 0for i=1,#tName do_sN = _sN .. tName[i]_len = _len + tCode[i]if _len >= nShowCount thenbreakendendsName = _sN .. "..."endreturn sNameend</span>然后在需要使用角色名称的模块界面SceneBattleSetment.lua文件调用这个GetShortName()函数:--note sName为玩家的名字local sName = WBattleGlobal:getCurrent():getHeroWithId(self.playerIds[index]).m_sPlayerNamelocal ttfname1 = element:getChildElement("teammateName")assert(ttfname1, "ttfname is nil")local sShortName = GetShortName(sName,12,7) --调用函数显示合适角色名称WZUILabelTTF:luaTo(ttfname1):setText(sShortName)调用后,效果如下:其他地方类似,效果如下:
相关文章推荐
- PHP截取指定长度的字符串,超出部分用 ..替换
- jQuery截取指定长度字符串超出部分省略代码
- 格式化字符串长度,超出部分显示省略号,区分汉字跟字母
- .Net截取字符串长度超出部分以...代替
- ASP.net:截取固定长度字符串显示在页面,多余部分显示为省略号
- freemaker页面中截取指定长度的字符串,超出长度的部分用…替代
- js截取字符串指定长度,超出长度显示省略号
- 格式化字符串长度,超出部分显示省略号,区分汉字跟字母
- 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
- ASP.net:截取固定长度字符串显示在页面,多余部分显示为省略号
- CSS3:text-overflow实现文字截取,超出部分显示省略号
- asp.net截取给定长度的汉字超出部分以...代替方法
- 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
- [转]用css实现的省略号替换超出长度文本
- Js自动截取字符串长度,添加省略号(……)的实现方法
- js截取字符串长度,超出的用省略号代替
- div+css截取字符串在规定长度,超出部分用。。。代替
- 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
- 有限长度空间内文本长度超出后通过css实现截取并显示省略号的方法
- js实现超过长度的字符截取指定长度(中文字符算2个字符),超出部分以...显示