cocos2dx 文本label显示方法LabelBMFont,LabelAtlas,MenuItemFont

本文深入探讨了Cocos2d-x中如何使用字体定义的菜单项、LabelAtlas和LabelBMFont进行动态字符显示,包括自定义字体大小、使用系统字体与图片动态加载技巧,以及如何利用LabelAtlas实现时钟动态显示,同时介绍了LabelBMFont的灵活性和编辑工具BitmapFontGenerator的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.标签菜单项

使用字体定义的菜单项MenuItemFont

//菜单项1

MenuItemFont(用的是系统自带的字体)

//设置字体的大小
    MenuItemFont::setFontSize(30);
    //使用系统自带的Courier New字体
    MenuItemFont::setFontName("Courier New");
    //创建MenuItemFont对象
    auto *item1=MenuItemFont::create("HelloCocos");

//菜单项2

   MenuItemFont::setFontSize(50);
   MenuItemFont::setFontName("Courier New");
    //创建字体菜单项并带有回调函数
    auto *item2=MenuItemFont::create("Return",this,menu_selector(HelloWorld::turnToGameView));
 

LabelAtlas (用的资源的是图片)

当你只使用少量字符的时候,为了避免加载整个字体文件耗费内存和空间,可以使用一张做好的图片来动态加载图片中的图像来达到字体的效果。

主要功能:从事先做好的图片中根据给出的每个字符的显示大小和需要显示的字符,将其图形计算显示出来。

比如说,我们准备显示 0-9 十个数字,我们可以在一张图片中制作好这十个数字。每个数字都有相同的宽度和高度。将它保存在资源中。

 

比较重要的是,这十个数字要按照 ASCII 顺序排列,我们要设置第一个字符的 ASCII 编码,这样,Cocos2d-x 就可以直接计算出不同字符对应的图形了。

auto labelAtlas=LabelAtlas::create(s,"nums.png",18,30,'0');

或使用plist文件:auto labelAtlas=LabelAtlas::create(s,"nums.plist");


第一个参数:显示的内容:1x,你也许会奇怪为什么是1x,因为使用的png图必须是连续的,因为程序内部是议连续的scall码识别的。9的后一位的”:“,所以先实现x就得用”:“代替。

第二个参数:图片的名字

第三个参数:每一个数字的宽

第四个参数:每一个数字的高

每五个数字:开始字符

LabelAtlas* diceCount = CCLabelAtlas::create("100:", "nums_font.png", 14, 21, '0');
diceCount->setPosition(Point(visibleSize.width - 150, visibleSize.height / 2 - 50));
addChild(diceCount);

 LabelAtals对象可以使用各种动作

//菜单项2

可以利用LabelAtlas实现时钟的显示(可以增加一个计时器来达到动态变化),下面是大概的实现思路

int a=1,b=2;
int time=a*10+b;
    char s[3];

    sprintf(s,"%d",time);  //将计算后的整形数字转成字符串在显示
    auto labelAtlas=LabelAtlas::create(s,"nums.png",18,30,'0');
    auto *item3=MenuItemLabel::create(labelAtlas,this,menu_selector(HelloWorld::turnToGameView));

LabelBMFont(用的资源是.fnt文件)

//菜单项4

更灵活的类是LabelBMFont. 它支持可变宽度的字符,而且他还有一个好用的编辑器Bitmap Font Generator

auto bmLabel=LabelBMFont::create("CO","font.fnt");//CO为要显示的字符,要显示的所有字符都要在font.fnt默认路径在//Resource下

//中,font.fnt是由工具生成的Bitmap文件

//    bmLabel->runAction(RepeatForever::create(RotateTo::create(1.5f,180)));
//    bmLabel->setRotation(90);
      auto item4=MenuItemLabel::create(bmLabel,this,menu_selector(HelloWorld::turnToGameView));



  //将菜单项添加到菜单中
   auto *menu1=Menu::create(item1,item2,item3,item4,NULL);
    //竖直排列菜单项
    menu1->alignItemsVertically();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值