大佬教程收集整理的这篇文章主要介绍了cocos2d-x RichText 真实高度,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
cocos2d-x版本3.8
在RichText自动换行后,发现不能得到真实高度,查看源码发现算出了实际高度,但确没用上,都多少个版本了,还没完善
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); this->addProtectedChild(l,1); Size iSize = l->getContentSize(); newContentSizeWidth += iSize.width; newContentSizeHeight = MAX(newContentSizeHeight,iSize.height); nextposx += iSize.width; } this->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];//这里 算出了实际高度,但确没用上 } 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); this->addProtectedChild(l,1); nextposx += l->getContentSize().width; } } 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); }
在RichText.h中加
Size _renderSize; Size& getRenderSize(); void setRenderSize(const Size &sizE);
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,newContentSizeHeight)); this->setRenderSize(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]; } 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,1); nextposx += l->getContentSize().width; } } this->setRenderSize(Size(_contentSize.width,newContentSizeHeight));//这里把没用上的newContentSizeHeight用上 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); }
Size& RichText::getRenderSize() { return this->_renderSize; } void RichText::setRenderSize(const Size &sizE) { _renderSize = size; }
发现adaptRenderers()是在Widget的visit()里调用的,也就是说当前桢不会被调用,这就好办了,在RichText pushBACkElement 之后显示的调用一下formatText()就OK了,
以上是大佬教程为你收集整理的cocos2d-x RichText 真实高度全部内容,希望文章能够帮你解决cocos2d-x RichText 真实高度所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。