- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在游戏开发中,最耗费性能的是显示文本,因为必须临时在内存中将文本生成bitmap,然后将bitmap绑定到OpenGL的纹理并渲染出来,AndEngine的作者估计是深入Java开发中缓存这个概念的重要性的影响,他对文本精灵作了一个精心的规划,分为不可变的文本精灵(Text)和可变的文本精灵(ChangeableText),并将生成文本bitmap并转换到纹理的职责委托给一个叫Font的类,Font类的实现很特别,它将要显示的字符串切分为单个的字符,通过canvas生成bitmap后缓存起来,然后在绑定纹理的时候合并,这样做的好处是当显示重复的字符时性能非常高,缺点是实现复杂导致若缓存池没有此字符时则性能稍低下。在实际使用中,当一个场景里已经存在很多精灵时,Text或ChangeableText的内容经常无法显示或者显示为一片空白区域。
???????? 在IPhone,文本精灵分别是CCLabelTTF和CCLabelAtlas,作用相当于AndEngine的Text和ChangeableText,但实现机制完全不一样,CCLabelTTF是将要显示的字符串先生成一张整体的bitmap然后使用Opengl渲染,而CCLabelAtlas则要求预先传入制作好的文字序列图片以便缓存起来。因此我参考Cocos2d的做法增加了一个Label类,此类结合LoadingScene使用起来还靠谱,缺点是在运行时同时改变两个以上的Label的文字时会有时其中一个Label的文字无法显示。以下是代码:
UltraTextSource:
HYPERLINK /visualcatsharp/article/details/6627673 \o view plain view plain
package?com.weedong.opengl;??
??
import?org.anddev.andengine.opengl.texture.source.ITextureSource;??
import?org.anddev.andengine.util.HorizontalAlign;??
import?org.anddev.andengine.util.MathUtils;??
import?org.anddev.andengine.util.StringUtils;??
??
import?android.graphics.Bitmap;??
import?android.graphics.Canvas;??
import?android.graphics.Paint;??
import?android.graphics.Rect;??
import?android.graphics.Typeface;??
import?android.graphics.Bitmap.Config;??
import?android.graphics.Paint.FontMetrics;??
import?android.util.FloatMath;??
import?android.util.Log;??
??
/**?
?*?性能较强的Font?TextureSource?
?*?@author??
?*?
?*/??
public?class?UltraFontTextureSource?implements?ITextureSource?{??
????private?int?mWidth;??
????private?int?mHeight;??
????private?Bitmap?mBitmap;??
??????
????public?UltraFontTextureSource(String?text,?Typeface?typeface,?float?fontSize,?final?int?pColor,?final?boolean?pAntiAlias,?HorizontalAlign?alignment)?{??
????????initialize(text,?alignment,?fontSize,?typeface,?pAntiAlias,?pColor);??
????}??
??
????public?UltraFontTextureSource(String?text,?Typeface?typeface,?float?fontSize,?final?int?pColor,?final?boolean?pAntiAlias)?{??
????????this(text,?typeface,?fontSize,?pColor,?pAntiAlias,?HorizontalAlign.LEFT);??
????}??
文档评论(0)