cocos2dx 利用CCLabelTTF设置字的水平间距与垂直间距

前端之家收集整理的这篇文章主要介绍了cocos2dx 利用CCLabelTTF设置字的水平间距与垂直间距前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在项目中对于文字显示要求会有很多种,比如加描边、加阴影、个别文字加颜色、字的行间距与列间距等等一些。。最近在看 cocos2d-x源码时发现引擎确实很强大里面有对文字的加描边与阴影的创建方法,但我在写实际运用时发现对文字加描边的效果不是很好,而且也没有找到可以设置字的行间距与列间距的方法,所以就写下了下面的方法以实现设置字的行间距与列间距,支持中英文状态下混输,支持自动换行。。有不好的地方请大家多多点评。。谢谢。。。。!.h文件
  1. #ifndef__HELLOWORLD_SCENE_H__
  2. #define__HELLOWORLD_SCENE_H__
  3. #include"cocos2d.h"
  4. usingnamespacecocos2d;
  5. usingnamespacestd;
  6. classHelloWorld:publiccocos2d::CCLayer
  7. {
  8. public:
  9. virtualboolinit();
  10. staticcocos2d::CCScene*scene();
  11. CCLabelTTF*horizontalSpacingANDverticalSpacing(string_string,constchar*fontName,floatfontSize,floathorizontalSpacing,floatverticalSpacing,floatlineWidth);
  12. CREATE_FUNC(HelloWorld);
  13. };
  14. #endif//__HELLOWORLD_SCENE_H__

.cpp文件
  1. #include"HelloWorldScene.h"
  2. #include"SimpleAudioEngine.h"
  3. CCScene*HelloWorld::scene()
  4. {
  5. CCScene*scene=CCScene::create();
  6. HelloWorld*layer=HelloWorld::create();
  7. scene->addChild(layer);
  8. returnscene;
  9. }
  10. boolHelloWorld::init()
  11. {
  12. if(!CCLayer::init())
  13. {
  14. returnfalse;
  15. }
  16. CCSizesize=CCDirector::sharedDirector()->getWinSize();
  17. stringstr="对敌人造成4,000的伤害、回合数延后一回合(上限10)当前战斗中,弱点属性伤害加成10%的上升。(不可重复)";
  18. //水平间距与垂直间距都是10像素,每行宽为300像素。
  19. CCLabelTTF*ttf=horizontalSpacingANDverticalSpacing(str,"Helvetica",26,10,300);
  20. ttf->setPosition(ccp(size.width*0.2,size.height*0.8));
  21. this->addChild(ttf);
  22. returntrue;
  23. }
  24. /*
  25. horizontalSpacing:水平间距
  26. verticalSpacing:垂直间距
  27. lineWidth:一行的最大宽度
  28. */
  29. CCLabelTTF*HelloWorld::horizontalSpacingANDverticalSpacing(string_string,floatlineWidth)
  30. {
  31. CCArray*labelTTF_arr=CCArray::create();
  32. intindex=0;
  33. intindex_max=strlen(_string.c_str());
  34. boolis_end=true;
  35. while(is_end){
  36. if(_string[index]>=0&&_string[index]<=127){
  37. stringenglishStr=_string.substr(index,1).c_str();
  38. labelTTF_arr->addObject(CCLabelTTF::create(englishStr.c_str(),fontName,fontSize));
  39. index+=1;
  40. }
  41. else{
  42. stringchineseStr=_string.substr(index,3).c_str();
  43. labelTTF_arr->addObject(CCLabelTTF::create(chineseStr.c_str(),fontSize));
  44. index+=3;
  45. }
  46. if(index>=index_max){
  47. is_end=false;
  48. }
  49. }
  50. //以上步骤是根据ASCII码找出中英文字符,并创建成一个CCLabelTTF对象存入labelTTF_arr数组中。
  51. //下面创建的原理是在CCLabelTTF对象上添加子对象CCLabelTTF,以此组合成一句话,以左上角第一个字为锚点。。
  52. CCLabelTTF*returnTTF=(CCLabelTTF*)labelTTF_arr->objectAtIndex(0);
  53. floatnowWidth=returnTTF->getContentSize().width;
  54. CCLabelTTF*dangqiangTTF=returnTTF;
  55. CCLabelTTF*lineBeginTTF=returnTTF;
  56. intarr_count=labelTTF_arr->count();
  57. for(inti=1;i<arr_count;i++){
  58. CCLabelTTF*beforeTTF=(CCLabelTTF*)labelTTF_arr->objectAtIndex(i);
  59. beforeTTF->setAnchorPoint(ccp(0,0.5));
  60. nowWidth+=beforeTTF->getContentSize().width;
  61. if(nowWidth>=lineWidth){
  62. nowWidth=returnTTF->getContentSize().width;
  63. dangqiangTTF=lineBeginTTF;
  64. beforeTTF->setPosition(ccp(0,-dangqiangTTF->getContentSize().height*0.5-verticalSpacing));
  65. lineBeginTTF=beforeTTF;
  66. }else{
  67. beforeTTF->setPosition(ccp(dangqiangTTF->getContentSize().width+horizontalSpacing,dangqiangTTF->getContentSize().height*0.5));
  68. }
  69. dangqiangTTF->addChild(beforeTTF);
  70. dangqiangTTF=beforeTTF;
  71. }
  72. returnreturnTTF;
  73. }

猜你在找的Cocos2d-x相关文章