cc.LabelBMFont的处理方式在web和jsb下不同,导致在web下开发调试时产生了几个bug,具体如下:
- 涉及到较多中文文本处理的自动换行问题。
在web下,自动换行的机制是当一行文本超过设定的宽度后,为保证英文单词不被隔断,会查找后续文本中的空格,查找成功后从空格处设置换行标志\n。当文本全是中文时,则无法换行。这个问题通过设置setLineBreakWithoutSpace(true)后解决。 - 宽度计算的bug
设置了BMFont得宽度后,当调用setScale()方法设置不同比例后,web上的整体宽度和jsb下不同。
这个问题找了半天,最后修改frameworks/cocos2d-html5/cocos2d/labels/CCLabelBMFont.js中的_getLetterPosXLeft函数和_getLetterPosXRight函数解决。去掉代码中的 *this._scaleX,修改后代码如下:
_getLetterPosXLeft: function (sp) {
return sp.getPositionX() - (sp._getWidth() * sp._getAnchorX());
},
_getLetterPosXRight: function (sp) {
return sp.getPositionX() + (sp._getWidth() * sp._getAnchorX());
},
```
3. 还是自动换行问题
当原始文本中存在\n标志时,多次使用setString(str)方法修改文本后,原始文本中的\n标志不再生效。导致自动换行处理的算法出现bug,无法自动换行。这个问题暂时没时间解决,只能避免原始文本中出现\n标志。
在这里请教各位大神有没有更好的处理方式,谢谢
学习了 正好遇到这个问题