说一说cocos2dx 获得字符宽度的问题,下面放出源代码,供大家参考和学习。因为项目需要,所以我就弄了一下,现在给大家放出来,大家可以参考学习和交流,哪有问题可以指正。根据输入字符串,计算字符串所需要占的Size。封装代码如下,只需传入字符串,即可返回Size:


  1. Size ChartDemoScene::calculateFontSize(const char *str )
  2. {
  3.     std::string tempString = str;
  4.     log("tempString = %s",tempString.c_str());
  5.     size_t computeCount = tempString.size();       //如果字符串很长每次抽取100个字符来计算size;
  6.     Size size = Size(0,0);
  7.     for (int i = 0; i<computecount ;)="" {="" std::string="" substring="tempString.substr(i,1);" if="" ((substring.c_str()[0]="" &="" 0x80="" )!="0)" 是汉字="" ,="" 3);="" i="" +="3;" }="" else="" i++;="" cclog("substring="%s" ",substring.c_str());="" auto="" templabel="LabelTTF::create(substring.c_str(),"",25);" templabel-="">setHorizontalAlignment(cocos2d::TextHAlignment::LEFT);
  8.         Size tmpLsize = tempLabel->getContentSize();
  9.         size.width+=tmpLsize.width;
  10.     }
  11.      
  12.     float fHeight= 0;
  13.     if( size.width > chartWidth)//大于容器的宽度
  14.     {
  15.         fHeight = (size.width / 200 );//计算需要多少行
  16.     }
  17.     int nHeight =  ceil(fHeight);
  18.      
  19.     if (nHeight == 0)
  20.     {
  21.         nHeight = 1;
  22.     }
  23.      
  24.     Size labelSize ;
  25.     if (size.width < chartWidth)
  26.     {
  27.         labelSize = Size(size.width,nHeight*32);//计算容器的Size
  28.     }
  29.     else
  30.     {
  31.         labelSize = Size(chartWidth,nHeight*28);
  32.     }
  33.      
  34.     //CCLog("labelSize = (%f, %f)",labelSize.width ,labelSize.height);
  35.     //CCLog("fHeight = %f  nHeight = %d " ,fHeight ,nHeight);
  36.     return labelSize;
  37. }</computecount>