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. }

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...