cocos2d-x 多行字串換行顯示以及CCLabelTTF中的bug修改
重點程式碼
//多行字串顯示(EngLish)
CCLabelTTF* Dlcx_Util::dlcx_drawString( const char * str ,float x,float y,float w,float h, GLubyte r,GLubyte g,GLubyte b,float fontSize,CCTextAlignment align)
{
ccColor3B c = {r, g, b};
CCSize size;
size.width = w;
size.height = h;
CCLabelTTF* label = CCLabelTTF::create(str,size, align,"Arial", fontSize);
label->setColor(c);
label->setPosition(ccp( x, y));
return label;
}
cocos2d-x 2.0.1引擎有一個bug
換行時最後一個文字老是不顯示
更改的方法為:
在java的Cocos2dxBitmap.java中找到divideStringWithMaxWidth方法:
具體程式碼為:
private static LinkedList<String> divideStringWithMaxWidth(Paint paint, String content,
int width){
int charLength = content.length();
int start = 0;
int tempWidth = 0;
LinkedList<String> strList = new LinkedList<String>();
/*
* Break a String into String[] by the width & should wrap the word
*/
for (int i = 1; i <= charLength; ++i){
tempWidth = (int)Math.ceil(paint.measureText(content, start, i));
if (tempWidth >= width){
int lastIndexOfSpace = content.substring(0, i).lastIndexOf(" ");
if (lastIndexOfSpace != -1 && lastIndexOfSpace > start){
/**
* Should wrap the word
*/
strList.add(content.substring(start, lastIndexOfSpace));
i = lastIndexOfSpace;
}
else {
/*
* Should not exceed the width
*/
if (tempWidth > width){
strList.add(content.substring(start, i - 1));
/*
* compute from previous char
*/
--i;
}
else {
strList.add(content.substring(start, i));
}
}
/*
* *********************************************************************
* 更改程式碼 去除cocos2d-x中換行最後一個字元被切掉的bug *
* while(content.indexOf(i++) == ' ') {} *
* *********************************************************************
*/
// remove spaces at the beginning of a new line
while(content.indexOf(i) == ' ') {
++i;
}
start = i;
}
}
根據紅色區域的程式碼改過就可以了。
文章借鑑於:
http://www.cocoachina.com/bbs/read.php?tid=158204
coco2d-x2.0.1後CCLabelTTF的一個BUG
在cocos2d-x2.0.1以後的版本存在這樣的一個BUG。我以cocos2d-x2.0.3為例,這樣建立一個CCLabelTTF:
複製程式碼
|
在android手機上當這個label自動換行的時候每一行的第一個字元會被切掉,經追查程式碼,發現在Cocos2dxBitmap.java的檔案裡有一個這樣的函式divideStringWithMaxWidth,估計功能是根據該label的size來拆分成每一行的字串到一個字元陣列裡面:
複製程式碼
|
該函式的298 - 300行的功能估計是將每一次換行後如果是以空格開始的話就把它去掉,但是那個i++是始終都會執行一次的,那就是說每次都會把一行的第一個字元去掉,所以就造成那個BUG了。經本人親自測試過,如果把298 - 300行換成以下的程式碼,就沒問題了。
複製程式碼
|
相關文章
- orcale 中查詢多行 後合併到一行顯示
- vim顯示換行符
- 在oracle中將一行字串拆分成多行Oracle字串
- CSS實現單行、多行文字溢位顯示省略號CSS
- IDEA 如何設定TAB頁顯示多行Idea
- 【BUG系列】Fragment中巢狀Fragment,不顯示Fragment巢狀
- JavaScript 多行字串JavaScript字串
- threeJs 修改TransformControls的顯示位置JSORM
- css 多行文字溢位省略號顯示CSS
- 轉:vscode 檔案標籤欄多行顯示VSCode
- CSS實現單行、多行文字溢位顯示省略號的實現方法CSS
- un-app - 單行文字和多行文字溢位隱藏顯示...(超出容器最大寬度不換行)APP
- uniapp uni.showModal的content實現換行顯示APP
- iPhone中XML處理以及網路上的圖片顯示iPhoneXML
- JavaScript 字串換行JavaScript字串
- Oracle中REGEXP_SUBSTR函式(字串轉多行)Oracle函式字串
- css3多行文字多行文字縮略點選更多展開顯示全部CSSS3
- MacOS 不顯示 SD 卡的 bug 解決方法Mac
- js中字串的替換JS字串
- LF和CRLF換行符不一致導致的Git顯示修改問題分析及解決Git
- Swift 4.0 字串擷取,拼接,字串富文字顯示Swift字串
- C#判斷字串的顯示寬度C#字串
- Flex佈局-垂直居中並換行顯示內容Flex
- git status顯示了未修改的檔案Git
- matplotlib畫圖未顯示,以及PyCharm中 %matplotlib inline報錯PyCharminline
- PyQT5之單行文字輸入到多行顯示窗QT
- el-image圖片預覽顯示bug
- CSS: 通過CSS控制字串長度(一行或者多行)CSS字串
- 《ASP.NET1200例》高亮顯示ListView中的資料行並自動切換圖片ASP.NETView
- CAD中能顯示列印不顯示
- 碰見一個BLOCKING_SESSION顯示不正確的BUGBloCSession
- 點亮點陣以及點陣的影像顯示
- c#自定義型別的轉換方式operator,以及implicit(隱式)和explicit (顯示)宣告C#型別
- Vscode導航欄開啟多個檔案換行顯示VSCode
- [BUG反饋]自定義模型不顯示資料模型
- vim顯示行號
- SSMS 顯示行號SSM
- BUG: JS 修改Date的TimezoneJS
- Linux中如何設定顯示檔案的前幾行?Linux