在 cocos2dx change line 的实现中,我们可以简单的使用 dimensions
属性控制换行。使用它只需将对应的参数值传入构造函数,或者调用 setDimensions 函数即可。
它的换行策略是:当一个单词超出限制长度时,将它移动到下一行。有时这种策略并不合适。例如,在某些语言中,单词都比较长。如果采用这种策略,会出现每一行中只有一个单词。因此需要更改换行策略。当超出限制长度时,使用 -
作为一个分隔单词的标志。
通过查看Cocos2d-x中换行的实现方式,我发现换行策略是区分平台编程出来的代码。也就是说,为了更改换行策略,我需要分别编写 IOS 和 Java 两部分代码。因为我的目标平台是 Android 平台,因此我只对Java文件进行了更改。IOS 平台的换行策略调用的是系统函数,有兴趣研究的读者可以跟踪源码更改。入口函数为:
Android 平台对应的 Java 文件位于 $(2DX-Root)/cocos2dx/platform/android/java/src/org/cocos2dx/lib 文件夹中,文件名是 Cocos2dxBitmap.java
首先,我增加了 divideStringWithMaxWidthByFlag 函数,将它作为另一个换行策略的实现函数。
增加函数之后,修改在 splitString 中的调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | private static String[] splitString(final String pString, final int pMaxWidth, final int pMaxHeight, final Paint pPaint) { final String[] lines = pString.split("\\n"); String[] ret = null; final FontMetricsInt fm = pPaint.getFontMetricsInt(); final int heightPerLine = (int) Math.ceil(fm.bottom - fm.top); final int maxLines = pMaxHeight / heightPerLine; if (pMaxWidth != 0) { final LinkedList<String> strList = new LinkedList<String>(); for (final String line : lines) { /* * The width of line is exceed maxWidth, should divide it into * two or more lines. */ final int lineWidth = (int) FloatMath.ceil(pPaint .measureText(line)); if (lineWidth > pMaxWidth) { strList.addAll(Cocos2dxBitmap.divideStringWithMaxWidthByFlag( line, pMaxWidth, pPaint)); } else { strList.add(line); ...... } |
更换调用函数后,编译打包,运行程序即可看到不同的换行效果。
本文出自: http://blog.csdn.net/fansongy / [ 松阳的博客 ] 禁止用于商业用途 转载请注明出处
原文链接: http://www.songyang.net/cocos2dx-change-line/
更改文字换行风格 ( cocos2dx change line )
原文地址:http://blog.csdn.net/fansongy/article/details/39992241