[转]用Flashplayer 10的新文本引擎实现文本上标及下标

新文本引擎的类都在flash.text.engine包中了。
Adobe Labs还发布基于此的文本布局框架Text Layout Framework (TLF).
TLF文档
如果使用TLF,个人推断,实现本例的效果应该更加简单容易,若不用TLF如何做呢?
我们可以先看看文本行图片(引自Adobe在线文档):

[img]http://dl.iteye.com/upload/attachment/380431/12790bd1-ab91-3360-b56e-65475cc24792.gif[/img]

调整图中的基线,也就是对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个小时才完成 -_-!!!
具体可以参考在线文档
欢迎留言讨论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值