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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值