cocos 中的label展示

tags:    時間:2013-12-28 00:18:25
cocos 中的label顯示

cocos2dx中使用的編碼格式是utf8,而腳本中使用的則是utf16,所以經常存在二者之間的轉換;


label 調用updateTexture-》CCTexture2D調用initWithString -》CCImage調用initWithString


這裡面調用dc.drawText(pText, size, eAlignMask),由dc把文字顯示出來


進入函數看到,首先調用MultiByteToWideChar把utf8轉換為寬字元(unicode)

然後調用DrawTextW將寬字元繪製;


所以繪製label的時候,要傳入utf8格式的中文字元,若直接"喊」的形式,傳入gbk格式的字元,將顯示亂碼;

可以這樣轉換,

wchar_t* a = L"發";
char* d_utf8 = cc_utf16_to_utf8((unsigned short*)a, 1, NULL, NULL);


或者:

char* pszText = "的馮紹峰";
int nLen = strlen(pszText);
// gbk to utf-16
int nBufLen  = nLen + 1;
wchar_t* pwszBuffer = new wchar_t[nBufLen];
memset(pwszBuffer, 0, sizeof(wchar_t)*nBufLen);
nLen = MultiByteToWideChar(CP_ACP, 0, pszText, nLen, pwszBuffer, nBufLen);


pszText = cc_utf16_to_utf8((unsigned short*)pwszBuffer, nLen, NULL, NULL);


轉換utf16到utf8可以:

char* d_sys_utf8;
iSize = WideCharToMultiByte(CP_UTF8, 0, d, -1, NULL, 0, NULL, NULL);
d_sys_utf8 = (char*)malloc((iSize+1)/**sizeof(char)*/);
WideCharToMultiByte(CP_UTF8, 0, d, -1, d_sys_utf8, iSize, NULL, NULL);

推薦閱讀文章

Bookmark the permalink ,來源:互聯網