使用AS3中的FTE来渲染文本(FLash文本引擎入门)

最近很多开发 者都在关注手机游戏 的开发,那么我来看看一个新特性(FP10),使用这种方法可以很好的解决跨硬件的问题.

FTE (Flash文本引擎)

FTE 提供对文本度量、格式和双向文本的复杂控制的低级别支持。设计 FTE 的主要目的在于为开发人员创建文本处理组件 提供基础。 在下面简单的例子中,你将会发现使用FTE并不复杂.

下面
代码 需要FP10


 package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.engine.*;
    public class fte extends Sprite {
        public function fte():void {
            // FTE TEXT
            var font_description:FontDescription = new FontDescription();
            font_description.fontName="Verdana";
            font_description.fontWeight=FontWeight.BOLD;
            font_description.fontPosture=FontPosture.ITALIC;
            font_description.renderingMode=RenderingMode.CFF;
            font_description.locked=true;
            var element_format:ElementFormat=new ElementFormat(font_description);
            element_format.fontSize=40;
            element_format.kerning=Kerning.ON;
            element_format.color=0x000000;
            element_format.alpha=1;
            var text_element:TextElement=new TextElement("Hello Flash World",element_format);
            var text_block:TextBlock = new TextBlock();
            text_block.content=text_element;
            var text_line:TextLine=text_block.createTextLine(null,500);
            text_line.x=20;
            text_line.y=40;
            addChild(text_line);
            // NORMAL TEXT
            var text_field:TextField=new TextField();
            var text_format:TextFormat = new TextFormat();
            text_format.color=0x000000;
            text_format.size=40;
            text_format.bold=true;
            text_format.font="Verdana";
            text_format.italic=true;
            text_field.x=18;
            text_field.y=30;
            text_field.width=460;
            text_field.height=60;
            text_field.text="Hello Flash World";
            text_field.setTextFormat(text_format);
            addChild(text_field);
        }
    }
}


1 至5 行:
导入所需类库.

9至14行:

使用
FontDescription 类来定义字体.通过锁定(第14行)字体和设置渲染模式为CFF(第13行)来增强文本的可读性,在小字号的情况下效果 更为明显,相关说明可以在官方文档中看到.

15至19行:

使用
ElementFormat 类来设置格式信息.但是我并没有使用文档中提到的基线对齐的新特性,关闭字距调整会提升文本的可读性.

20行:

使用
TextElement 类来表示我想显示并且已设置好格式的文本字符串,这块并没有什么特别的.

21至22行:

TextBlock 类会自己渲染自己,但是其更多功能是关于格式和控制.

23至25行:

使用TextLine 类来显示内容.如文档中所描述的一样,它仅仅是有很多只读的属性 .

23至40行:

和普通的文本框一样的操作

我们的成果是:

FTE.png



上面的一行是使用FTE,下面的是使用普通文本框.
我不得不承认:其实二者并没有什么显著区别(在本例中).
  这个例子的作用仅仅是帮你入门FTE

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AS3.0 TLFTextField 最新的组件库 以往的有BUG,这个可是最新的哦 package { import fl.controls.UIScrollBar; import fl.text.TLFTextField; import flash.events.Event; import flashx.textLayout.conversion.TextConverter; import flashx.textLayout.edit.IEditManager; import flashx.textLayout.elements.FlowElement; import flashx.textLayout.elements.InlineGraphicElement; import flashx.textLayout.elements.ParagraphElement; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.events.CompositionCompleteEvent; import flashx.textLayout.events.StatusChangeEvent; /** * 使用 TLFTextField 类创建使用文本布局框架 (TLF) 的高级文本显示功能的文本字段。 * TLFTextField 对象与 TextField 对象类似,但 TLFTextField 对象可以利用 flashx 包包含的 TLF 类的属性和方法。TLF 提供了大量格式选项和功能。 * @author */ public class STLFTextField extends TLFTextField { //最大段落数 private var _maxParagraph:uint = 0; //UI滚动条 private var uiScrollBar:UIScrollBar; public function STLFTextField() { super(); } private function tlfEventHandle(e:Event):void { super.textFlow.flowComposer.updateAllControllers(); if (uiScrollBar) { uiScrollBar.scrollPosition = uiScrollBar.maxScrollPosition; uiScrollBar.validateNow(); } } /** * 过滤段落数达到最大值时文本的段落 */ private function filtrationPar():void { if (_maxParagraph == 0) return; if (textFlow.numChildren > _maxParagraph) { for (var i:uint = 0; i < textFlow.numChildren - _maxParagraph; i++ ) { textFlow.removeChildAt(0); } } } /** * 在文本插入图片 * @param src 图片的路径或者库里面的MC实例 * @param width 图片的宽,默认是图片宽度 * @param height 图片的高,默认是图片的高度 */ public function insertImg(src:Object, width:Object = "auto", height:Object = "auto"):void { if(!textFlow.hasEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE)) super.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE, tlfEventHandle); if(super.textFlow.interactionManager is IEditManager) { IEditManager(super.textFlow.interactionManager).insertInlineGraphic(

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值