文字也是游戏最重要的元素之中的一个,以下就看看使用动态字体和静态字体库怎样创建文字。使用动态字体库创建的文字能够包括经常使用的不论什么字符,一般假设用户要输入名字,这就最好用动态字体库。由于你不知道用户要创建什么字符,但动态字体库比較大。假设要压缩包的大小,尽量就用静态字体库,以下会介绍怎样制作静态字体库。

动态字体库

在系统的System32/Font文件下就有若干多个字体库,比如微软雅黑.ttf等。我们能够找一个ttf文件直接放在Resource文件下。
  1. CCLabelTTF *label = CCLabelTTF::create(G2U("hello,世界"),"bb1519",25);
  2. label->setPosition(ccp(size.width/2,size.height/2));
  3. this->addChild(label);

由于cocos2dx在windows平台下中文字体须要进行一个转码,cocos中中文默认的是gb2312编码,而OpenGL渲染中文的时候支持UTF8编码格式,这就须要进行一个转码。不然的话显示出来会是乱码。

转码函数:
  1. //转码成utf-8,windows默认gb2312
  2. char* HelloWorld::G2U(const char* gb2312)
  3. {
  4. int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
  5. wchar_t* wstr = new wchar_t[len+1];
  6. memset(wstr, 0, len+1);
  7. MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
  8. len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
  9. char* str = new char[len+1];
  10. memset(str, 0, len+1);
  11. WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
  12. if(wstr) delete[] wstr;
  13. return str;
  14.  
  15. }

静态字体库

静态字体库是以fnt命名格式的文件,和还有一张png字体图集相应的。程序中仅仅能显示静态字体包括的字符,假设字库里面没有该字符的话。界面中就不会显示出来。

怎样制作静态字体库?

1.下载安装BMFont工具;
2.新建文本文件。里面输入想要的字符,切记要保存为utf8格式。不然软件不识别。
3.打开BMFont工具,Edit->Select char from file,导入刚刚的字符文本。软件会自己主动识别你所输入的字符,而且灰色显示。

4.选择Option->FontSetting
5.选择Option->Save bitmap font as,保存字库

6.设置导出选项,在BMFont上找到Option菜单,然后选择Export options。在cocos2d-x中须要按例如以下设置

7. 准备导出字体。在BMFont上找到Options,然后选择Save bitmap font as,会发现保存路径下多出了一个fnt文件和一个png文件(事实上这个和plist文件保存拼图信息原理差点儿相同),将它们复制到cocos2d-xproject的Resources文件夹下

代码创建文字
  1. CCLabelBMFont *labelfont = CCLabelBMFont::create("i am dingxiaowei","text.fnt");
  2. labelfont->setPosition(ccp(size.width*0.5,size.height/2 -30));
  3. this->addChild(labelfont);

效果图

静态字体库创建的文本会发现显示的文字跟我们输入的有差别,没有显示全,这就是静态字体库创建的label须要注意的,必须要确保你想要显示的字符。在静态字体库中都要有!
第二种创建文本的方法:
  1. CCLabelAtlas *labelalt = CCLabelAtlas::create("hello,alets","xxx.plist");
  2. labelfont->setPosition(ccp(size.width*0.5,size.height/2 -30));
  3. this->addChild(labelfont);

欢迎关注我的围脖

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243

Unity QQ群:375151422      cocos2dx QQ群:280818155

====================== 相互学习,共同进步 ===================

[windows+cocos2dx]文本类的更多相关文章

  1. 背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox

    [源码下载] 背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) AutoSug ...

  2. 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox

    [源码下载] 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox 作者:webabcd ...

  3. 背水一战 Windows 10 (28) - 控件(文本类): TextBox, PasswordBox

    [源码下载] 背水一战 Windows 10 (28) - 控件(文本类): TextBox, PasswordBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) T ...

  4. 背水一战 Windows 10 (27) - 控件(文本类): TextBlock

    [源码下载] 背水一战 Windows 10 (27) - 控件(文本类): TextBlock 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) TextBlock 示例 ...

  5. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  6. 控件(文本类): TextBox, PasswordBox

    介绍背水一战 Windows 10 之 控件(文本类) TextBox PasswordBox 示例1.TextBox 的示例 1Controls/TextControl/TextBoxDemo1.x ...

  7. 控件(文本类): TextBlock

    1.TextBlock 的示例 1Controls/TextControl/TextBlockDemo1.xaml <Page x:Class="Windows10.Controls. ...

  8. 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox

    介绍背水一战 Windows 10 之 控件(文本类) RichTextBlock RichTextBlockOverflow RichEditBox 示例1.RichTextBlock 的示例Con ...

  9. windows系统操作类和演示程序(关机,关闭显示器,打开屏幕保护程序,打开光驱等)

    /// <summary> /// 系统控制类,关机,关闭显示器,打开屏幕保存程序等 /// </summary> public class SystemPowerContro ...

随机推荐

  1. 问题 C: Frosh Week(2018组队训练赛第十五场)(签到)

    问题 C: Frosh Week 时间限制: 4 Sec  内存限制: 128 MB提交: 145  解决: 63[提交][状态][讨论版][命题人:admin] 题目描述 Professor Zac ...

  2. 色彩空间-- RGB\HSV

    颜色空间 标签(空格分隔): 计算机视觉 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间. RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Sat ...

  3. iOS12系统应用开发发送邮件

    iOS12系统应用开发发送邮件 消息分享是应用社交化和营销的重要途径.除了开发者自己搭建专有的消息分享渠道之外,还可以借助系统自带的各种途径.iOS提供了3种快速分享消息的方式,分别为发送邮件.发送短 ...

  4. Adams输出宏代码

    for variable_name=loopobj object_names=.amachinery.* type=macro var set var=filename1 str=(eval(STR_ ...

  5. [Python]Python入坑小项目推荐- Flask example minitwit

    知乎上看到的Python练手项目推荐,链接见:https://www.zhihu.com/question/29372574,不知道是我自己懒得看还是理解力不行,这些项目真的是...太大了呀~~~~ ...

  6. Android 如何判断指定服务是否在运行中 “Service”

    如何判断一个服务是否正在运行中: /** * 判断某个服务是否正在运行的方法 * * @param mContext * @param serviceName 是包名+服务的类名 * @return ...

  7. Module not found: Error: Can't resolve 'XXX' in 'XXXX'

    故障 控制台运行webpack/npm时出现 Module not found: Error: Can't resolve 'XXX' in 'XXXX' 解决方案 npm i XXX --save ...

  8. World Finals 2017爆OJ记

    Day-Inf: 去年China-Final一道数据结构题的FB送我进WF. 今年课表意外地满,好几天都是早上8点一直上课上到晚上9点,作业也相对较多.敝队大约每个星期只能训练一个下午,有时候甚至一整 ...

  9. Django——邮件发送

    在settings中添加关键信息 EMAIL_HOST = 'smtp.qq.com' #不同的邮箱有不同的发件地址(收件地址) EMAIL_PORT = 25 #smtp端口号 EMAIL_HOST ...

  10. Codeforces Round #428 (Div. 2) D. Winter is here 容斥

    D. Winter is here 题目连接: http://codeforces.com/contest/839/problem/D Description Winter is here at th ...