前端之家收集整理的这篇文章主要介绍了
cocos2dx CCLabelTTF 字体自动换行,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我用的2.1.4版本的引擎,搞的我头疼死了。我也是在网上抄的一份,各种不行,然后自己
修改他的,就可以了。
void initString() { //将中文进行转换为TTF
std::string _string = tipsInfo.tipsString; //初始化Tips字符串
int index = 0;
int index_max = strlen(_string.c_str());
bool is_end = false;
if (labelTTF_arr != nullptr)
{
labelTTF_arr->removeAllObjects();
} else
{
labelTTF_arr = CCArray::create();
labelTTF_arr->retain();
}
while (! is_end) { //格式转化
//以上步骤是根据ASCII码找出中英文字符,并创建成一个CCLabelTTF对象存入labelTTF_arr数组中。
if (_string[index] >= 0 && _string[index] <= 127) {
string englishStr =_string.substr(index,1).c_str();
labelTTF_arr->addObject(CCLabelTTF::create(englishStr.c_str(),fontMakertFilePath,12));
index += 1;
}
else{
string chineseStr = _string.substr(index,3).c_str();
labelTTF_arr->addObject(CCLabelTTF::create(chineseStr.c_str(),12));
index += 3;
}
if (index >= index_max) {
is_end = true;
}
}
initStringFormat(8,10,250); //设置对齐方式
}
void initStringFormat(float horizontalSpacing,float verticalSpacing,float lineWidth) {
//下面创建的原理是在CCLabelTTF对象上添加子对象CCLabelTTF,以此组合成一句话,以左上角第一个字为锚点。。
CCLabelTTF* pWillShowWords = (CCLabelTTF*)labelTTF_arr->objectAtIndex(0);
float nowWidth = pWillShowWords->getContentSize().width;
CCLabelTTF* pCurrentTTF = pWillShowWords;
CCLabelTTF* pBeginTTF = pWillShowWords;
int arr_count = labelTTF_arr->count();
for (int i=1; i < arr_count; i++) {
CCLabelTTF* updateTTF = (CCLabelTTF*)labelTTF_arr->objectAtIndex(i);
updateTTF->setAnchorPoint(ccp(0.0f,0.5f));
const char *pLineBreak = ((CCLabelTTF *)labelTTF_arr->objectAtIndex(i))->getString();
nowWidth += updateTTF->getContentSize().width;
if (nowWidth >= lineWidth || (std::strcmp(pLineBreak,"\n") == 0)) {
nowWidth = pWillShowWords->getContentSize().width;
if (std::strcmp(pLineBreak,"\n") == 0)//在你的字符串里面添加一个\n字符,其他字符也行(表示换行)
{
nowWidth = lineWidth; //换行
continue;
}
updateTTF->setPosition(ccp(0,-pCurrentTTF->getContentSize().height * 0.5 - verticalSpacing));
pCurrentTTF = pBeginTTF;
pBeginTTF = updateTTF;
}else{
updateTTF->setPosition(ccp(pCurrentTTF->getContentSize().width + horizontalSpacing,pCurrentTTF->getContentSize().height * 0.5));
}
pCurrentTTF->addChild(updateTTF);
pCurrentTTF = updateTTF;
}
this->addChild(pWillShowWords,100); //test
//TODO/
//设置你字体坐标:pWillShowWords->setPosition(..)
}
原文链接:/cocos2dx/342816.html