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(..)
}

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...