l

成都手游码农一枚
随笔 - 32, 文章 - 0, 评论 - 117, 引用 - 0
数据加载中……

[cocos2d-x] RichText 杂记三。

上一篇博客尝试性在cocos2d-x中使用freetype,由于项目进度,近期没怎么研究,苦逼加班族。现在稍微闲下来了在小谈一下这个话题。

这几天稍微闲了下,于是打算把freetype集成到公司项目中,这里先总结下,代码不能上传,因为在公司没权限- -!

1.上一篇文章中的的描边其实有两处内存泄漏, Get_Glayph后没有调用Done_Glayph。
2.文字渲染可以glTexSubImage2D函数来替换,也可以一次性通过Rgb数据生成纹理,注意要设置纹理几个参数,否则拉伸了可能会出现模糊不清,而且初始化创建纹理时应该填充为透明色。同事要注意这个函数,如果你的x+w大于整个纹理宽度是会报错的,文字也就不见了,要小心。
3.android 加载字体可以直接加载,不需要从内存中读取,因为系统字体目录是可以直接访问读取的。
4.字体缓存我的实现方法是利用FTC_Manager的前提下将每个字母的RGB数据缓存,下次渲染如果发现效果大小一样的旧直接返回不再去读取,要注意的是FTC_Mananger_LookupSize 函数返回的FT_Size结构,所以不能通过它来索引缓存,而应该用实际字体Size,还有就是FT_Size在使用前一定要确保是最新的哦,这里东西是不能长时间保留的,也就是说查找一次用一次。
5.注意android纹理限制,2048*2048,所以对于很长的文本要注意了。
6.为了兼容以前的一些代码,现在我是直接将CCLabellTTF的实现替换了,所以同时要注意两个布局参数,调整好了后你会发现在PC端使用android系统字体的话整体效果应该是和在android上一样,这样就很方便在PC端查看效果了,美术也就方便不少了。

暂且就想到了这些,整体来说目前测试出的效果目前运行的还算比较流畅的。

posted on 2013-12-06 18:26 l1989 阅读(5170) 评论(7)  编辑 收藏 引用 所属分类: C++游戏

评论

# re: [cocos2d-x] RichText 杂记三。  回复  更多评论   

你好,请问一下你的freetype是怎样编译过的啊
2013-12-07 17:37 | Damein

# re: [cocos2d-x] RichText 杂记三。  回复  更多评论   

目前我使用cocos2d-x已经编译好的freetype库能显示了,但排版还是不懂,博主能指导一下吗
2013-12-09 19:31 | Damein

# re: [cocos2d-x] RichText 杂记三。[未登录]  回复  更多评论   

@Damein
编译那块我也是用的已经编译好的

字体排版freetype文档中有例子,主要是一些排版参数,富文本排版可以通过一个字一个字的组合,字的大小是已经知道的,可以先把大小、颜色一样的字集合到一起组成一个长串,长度宽度也是可以计算出来的,然后再将这些串来进行排版,主要是换行。
2013-12-10 09:19 | azl

# re: [cocos2d-x] RichText 杂记三。  回复  更多评论   

https://github.com/happykevins/cocos2dx-ext

这个人已经做出来了
2013-12-17 16:50 | h

# re: [cocos2d-x] RichText 杂记三。[未登录]  回复  更多评论   

我遇到下面的情况:
setDesignResolutionSize设置为1024*768
实际手机窗口的分辨率是1280*720
这种情况下我的freetype实现方案文字会出现模糊
引擎原生的cclabelttf就不会出现这个问题
请问这种情况你们遇到吗?怎么解决的?
2013-12-31 17:13 | whier

# re: [cocos2d-x] RichText 杂记三。[未登录]  回复  更多评论   

@whier
起初我的做法是直接通过RGB数据生成纹理贴图,也出现了你说的这种情况。
后来我是通过预先创建好纹理,在通过glTexSubImage2D来修改纹理数据,问题就解决了。估计应该是纹理设置之类参数造成的,你可以好好检查下。
2014-01-01 10:30 | azl

# re: [cocos2d-x] RichText 杂记三。[未登录]  回复  更多评论   

多谢博主指点。
知道原因了,适应多种屏幕分辨率,渲染文字时的顶点数据不是直接取纹理的宽高计算,而是需要根据content factor缩放下,保证渲染时,渲染区域和纹理大小一致,这样就不会出现拉伸了
楼上h提到的https://github.com/happykevins/cocos2dx-ext项目没有自适应屏幕分辨率,需要对代码进行一些改造才不会拉伸
2014-01-02 11:25 | whier

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理