大佬教程收集整理的这篇文章主要介绍了[寒江孤叶丶的Cocos2d-x之旅_21]3.x RichText自动适应高度,formarRenderers 自动更改高度 疑似BUG修复,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的CrossApp之旅系列]
博客地址:http://blog.csdn.net/qq446569365
@H_489_4@ RichText 是Cocos GUI功能中的一个控件,主要用于图文混编。称之为“富文本”。然后笔者在使用其进行开发的过程中发现他居然不回自动更改控件的高度。下边空出一大块范围,由于我是用其开发聊天系统,下边空出一行实在是无法忍受的,所以开始对源代码动刀子,尝试添加个功能。在添加过程中发现,触控团队应该是有让他自动适应高度的功能,但是不知道为啥却没有实现(目测是在代码里少打了一行……)笔者修复了一下,(菜鸟级修复,大神请别喷,如果有更好的方案,请务必回复告知,跪谢!)。修复方法很简单,找到ui/UIRichText.cpp文件中的formarRenderers方法(OMG,触控的各位大牛,咱不至于把 t 按成 r 吧……),
添加两行行代码:
_customSize.height=newContentSizeHeight;
_elementRenderersContainer->setContentSize(_size);
并修改一行:
_elementRenderersContainer->setPosition(0,0);
即可!如果本篇博客就这么完了,我相信读者一定要打死我了!所以,附上代码段……
@H_489_4@ 3.0版本代码段:void RichText::formarRenderers() { if (_ignoreSizE) { float newContentSizeWidth = 0.0f; float newContentSizeHeight = 0.0f; Vector<Node*>* row = (_elementRenders[0]); float nextposx = 0.0f; for (ssize_t j=0; j<row->size(); j++) { Node* l = row->at(j); l->setAnchorPoint(Point::ZERO); l->setPosition(Point(nextposx,0.0f)); _elementRenderersContainer->addChild(l,1,(int)j); Size iSize = l->getContentSize(); newContentSizeWidth += iSize.width; newContentSizeHeight = MAX(newContentSizeHeight,iSize.height); nextposx += iSize.width; } _elementRenderersContainer->setContentSize(Size(newContentSizeWidth,newContentSizeHeight)); } else { float newContentSizeHeight = 0.0f; float *maxHeights = new float[_elementRenders.size()]; for (size_t i=0; i<_elementRenders.size(); i++) { Vector<Node*>* row = (_elementRenders[i]); float maxHeight = 0.0f; for (ssize_t j=0; j<row->size(); j++) { Node* l = row->at(j); maxHeight = MAX(l->getContentSize().height,maxHeight); } maxHeights[i] = maxHeight; newContentSizeHeight += maxHeights[i]; } _customSize.height=newContentSizeHeight;//------------------添加的第一行------------------ float nextposy = _customSize.height; for (size_t i=0; i<_elementRenders.size(); i++) { Vector<Node*>* row = (_elementRenders[i]); float nextposx = 0.0f; nextposy -= (maxHeights[i] + _verticalSpacE); for (ssize_t j=0; j<row->size(); j++) { Node* l = row->at(j); l->setAnchorPoint(Point::ZERO); l->setPosition(Point(nextposx,nextposy)); _elementRenderersContainer->addChild(l,(int)(i*10 + j)); nextposx += l->getContentSize().width; } } _elementRenderersContainer->setContentSize(_sizE); delete [] maxHeights; } size_t length = _elementRenders.size(); for (size_t i = 0; i<length; i++) { Vector<Node*>* l = _elementRenders[i]; l->clear(); delete l; } _elementRenders.clear(); if (_ignoreSizE) { Size s = getVirtualRendererSize(); _size = s; } else { _size = _customSize; } updateContentSizeWithTextureSize(_sizE); _elementRenderersContainer->setContentSize(_sizE);//------------------添加的第二行------------------ _elementRenderersContainer->setPosition(0,0);//------------------修改这行------------------ //最后这行原来是 _elementRenderersContainer->setPosition(_contentSize.width / 2.0f,_contentSize.height / 2.0f); }
3.3版本从代码上看好像也存在这个问题,但是我没有实际运行测试过是否有这个问题,懒得运行了。各位如果3.3遇到的话,也可以这么修复,只不过3.3版本有一些变量名的变化而已。
3.3版本代码:
void RichText::formarRenderers() { if (_ignoreSizE) { float newContentSizeWidth = 0.0f; float newContentSizeHeight = 0.0f; Vector<Node*>* row = (_elementRenders[0]); float nextposx = 0.0f; for (ssize_t j=0; j<row->size(); j++) { Node* l = row->at(j); l->setAnchorPoint(Vec2::ZERO); l->setPosition(nextposx,0.0f); _elementRenderersContainer->addChild(l,1); Size iSize = l->getContentSize(); newContentSizeWidth += iSize.width; newContentSizeHeight = MAX(newContentSizeHeight,maxHeight); } maxHeights[i] = maxHeight; newContentSizeHeight += maxHeights[i]; } this->_customSize.height=newContentSizeHeight;//------------------添加的第一行------------------ float nextposy = _customSize.height; for (size_t i=0; i<_elementRenders.size(); i++) { Vector<Node*>* row = (_elementRenders[i]); float nextposx = 0.0f; nextposy -= (maxHeights[i] + _verticalSpacE); for (ssize_t j=0; j<row->size(); j++) { Node* l = row->at(j); l->setAnchorPoint(Vec2::ZERO); l->setPosition(nextposx,nextposy); _elementRenderersContainer->addChild(l,1); nextposx += l->getContentSize().width; } } _elementRenderersContainer->setContentSize(_contentSizE); delete [] maxHeights; } size_t length = _elementRenders.size(); for (size_t i = 0; i<length; i++) { Vector<Node*>* l = _elementRenders[i]; l->clear(); delete l; } _elementRenders.clear(); if (_ignoreSizE) { Size s = getVirtualRendererSize(); this->setContentSize(s); } else { this->setContentSize(_customSizE); } updateContentSizeWithTextureSize(_contentSizE); _elementRenderersContainer->setContentSize(_contentSizE);//------------------添加的第二行------------------ _elementRenderersContainer->setPosition(0,_contentSize.height / 2.0f); }
以上是大佬教程为你收集整理的[寒江孤叶丶的Cocos2d-x之旅_21]3.x RichText自动适应高度,formarRenderers 自动更改高度 疑似BUG修复全部内容,希望文章能够帮你解决[寒江孤叶丶的Cocos2d-x之旅_21]3.x RichText自动适应高度,formarRenderers 自动更改高度 疑似BUG修复所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。