您的位置:首页 > 编程语言 > Lua

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)调用后,效果如下:其他地方类似,效果如下:
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Lua
相关文章推荐