在label中,为了实现打字机效果,会一个字一个字出现。但发现,如果字符串中包含中文标点符号比如“。”“,”,就会出现文字换行时会挪动,不太好看,如果换成英文标点符号就没这个问题,这个能解决下吗?中文加英文标点符号有时候确实不好看,特别是句号
能否提供一个测试 demo,抖动的问题,应该也是你的代码来解决。。。
typingAni : function(){
var self = this;
var arr = self.msg.split('');
var len = arr.length;
var step = 0;
self.unschedule(self.func);
var func = function(){
self.labMsg.string += arr[step];
if(++step == len){
self.unschedule(self.func);
dy.theAudio.playMusic("bgm_home", true);
self.canTouch = true;
}
}
self.schedule(self.func, 0.1, cc.macro.REPEAT_FOREVER, 0)
},
代码是这样写的,让msg在labMsg中一个一个出来,其他没什么特别的
你弄一个 demo 上来,我帮你看看呗。这代码我看不出什么问题。
我稍微分析了一下,好像是中文标点不能出现在一行的开头,不知道这是不是刻意为之,但觉得跳来跳去更不好看
对,这个就是刻意为之。
如果你不想跳,可以修改 CCTextUtils.js 这个文件:
把 label_symbolRex 中的中文标点去掉可以了。
label_symbolRex : /^[!,.:;}\]%\?>、‘“》]/,
或者你可以修改一下字体大小,让中文的标点不会出现在一行的开头。
谢谢,改字体大小或者label宽度只能对应解决,而且文本还不能随便改变。
如果连续写多个“,”还是会出现标点在前。一般这个需求也只是在少数地方用到,比如对话,大多数一次展示用默认的方法就可以了。不知道label控件能不能把这个选项暴露出来,或者直接由用户来填写哪些符号需要这样处理,这样就能在一个项目中同时满足这两个需求了,因为这两种需求在同一个项目都同时存在,改引擎感觉不是一个好的选择,而且会带来升级和换电脑的麻烦
这个选项不能随便暴露的,native 端系统底层的算法貌似也是这样的。
不修改引擎也是可以修改的,js 是动态语言。
直接修改 cc.TextUtils.label_symbolRex = /^[!,.:;}\]%\?>、‘“》]/; 就可以了。
在 onLoad 的时候加上这个。
如果希望还原以前的行为,再调用一下:
cc.TextUtils.label_symbolRex = /^[!,.:;}\]%\?>、‘“》?。,!]/;
这个是全局的吧,这样一改会不会导致所有用到label的地方都必须先赋一次值啊
是全局的,这个只会影响标点的表现,你不是希望标点可以在行首么?
这个修改只对 web 有效,native 系统层的算法是中文标点不能在行首。
意思是说这个改动只针对web有效,对于native版本除了不用中文标点,否则就没法解决这个问题了吗?
native 版本修改字体大小吧,或者你接受现在的行为。