[转]用Flashplayer 10的新文本引擎实现文本上标及下标
新文本引擎的类都在flash.text.engine包中了。
Adobe Labs还发布基于此的文本布局框架Text Layout Framework (TLF).
TLF文档
如果使用TLF,个人推断,实现本例的效果应该更加简单容易,若不用TLF如何做呢?
我们可以先看看文本行图片(引自Adobe在线文档):
调整图中的基线,也就是对flash.text.engine.ElementFormat中的
alignmentBaseline,dominantBaseline,baselineShift属性进行适当设置,
便可实现文字的上标及下标。
以A的3次方为例,我们输入以下代码:
/*** 部分代码参考Adobe文档:* http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/text/engine/package-detail.html* by kingnare.com*/package{import __AS3__.vec.Vector;import flash.display.Sprite;import flash.text.engine.ContentElement;import flash.text.engine.ElementFormat;import flash.text.engine.FontDescription;import flash.text.engine.FontWeight;import flash.text.engine.GroupElement;import flash.text.engine.TextBaseline;import flash.text.engine.TextBlock;import flash.text.engine.TextElement;import flash.text.engine.TextLine;[SWF(width="800", height="600", backgroundColor="#FFFFFF", framerate="24")]public class TextEngineTest_TextBaseline extends Sprite{public function TextEngineTest_TextBaseline(){//字体属性var fd1:FontDescription = new FontDescription(“Arial”);//格式设置var ef1:ElementFormat = new ElementFormat(fd1, 16);var fd2:FontDescription = new FontDescription(“Arial”);var ef2:ElementFormat = new ElementFormat(fd2, 10);//将基线上移8个像素ef2.baselineShift = -8;//创建已设置格式的文本的字符串var te1:TextElement = new TextElement(“A”,ef1);var te2:TextElement = new TextElement(“3″,ef2);var groupVector:Vector. = new Vector.();groupVector.push(te1, te2);//组成ContentElement集合var groupElement = new GroupElement(groupVector);//创建文本块var textBlock:TextBlock = new TextBlock();textBlock.content = groupElement;//显示文本createTextLines(textBlock);}//显示文本private function createTextLines(textBlock:TextBlock):void{var yPos = 20;var line_length:Number = 450;var textLine:TextLine = textBlock.createTextLine(null,line_length);while (textLine){addChild(textLine);textLine.x = 15;yPos += textLine.height + 8;textLine.y=yPos;textLine=textBlock.createTextLine(textLine,line_length);}}}}编译运行后可以看到A的3次方表达式。
有上面的例子,实现文章开始的式子就容易多了。
我们只要把相应的ElementFormat中的属性alignmentBaseline设置为TextBaseline.DESCENT即可实现文字下标。源代码下载地址:
TextEngineTest_TextBaseline.zip
代码先不解释了,这些类还没有熟练掌握,光这个例子花了N个小时才完成 -_-!!!
具体可以参考在线文档
欢迎留言讨论