我需要在Flex中开发一个动画来模拟某人手写一个具有动态内容的文本区域。我不关心字体的实际曲线,但我需要一种清晰的方式来显示文本逐行,并在笔的位置后面加上一个掩码。
类似的内容,但是有一个本机文本区域和我自己的字体:
http://activeden.net/item/handwriting-animation-tool-v25/11733
mxml中的textarea只能有一个掩码,所以我想我应该以编程方式创建我的掩码。有人这样做了吗?
谢谢
发布于 2011-02-19 04:03:16
有一些不同的技术,以创造真正的效果-就像什么是显示在该网站。并且要注意,这是相当乏味的工作。在Flex中,您可以做的是显示文本行,然后用任何形状的掩码显示字母。下面是一个简单的例子:
<fx:Script>
<![CDATA[
import mx.graphics.SolidColor;
import spark.components.Group;
import spark.components.RichText;
import spark.primitives.Rect;
private function createMultilineMask():void
{
var txt:RichText = new RichText();
txt.x = 20;
txt.width = 260;
txt.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque tempus, eros ac dignissim interdum...";
txt.setStyle('fontFamily', 'Times');
txt.setStyle('fontStyle', 'italic');
txt.setStyle('fontSize', 16);
txt.setStyle('color', 0xFF0000);
var textMask:Group = new Group();
var ln1:Rect = new Rect();
ln1.x = 0;
ln1.y = 0;
ln1.width = 0;
ln1.height = 14;
ln1.fill = new SolidColor(0x000000);
textMask.addElement(ln1);
var ln2:Rect = new Rect();
ln2.x = 0;
ln2.y = 20;
ln2.width = 0;
ln2.height = 14;
ln2.fill = new SolidColor(0x000000);
textMask.addElement(ln2);
var ln3:Rect = new Rect();
ln3.x = 0;
ln3.y = 40;
ln3.width = 0;
ln3.height = 14;
ln3.fill = new SolidColor(0x000000);
textMask.addElement(ln3);
var container:Group = new Group();
container.x = 100;
container.y = 100;
container.mask = textMask;
container.maskType = 'clip';
container.addElement(txt);
addElement(container);
addEventListener(Event.ENTER_FRAME, drawLine);
function drawLine(event:Event):void
{
if (ln1.width < 300)
ln1.width += 2;
else if (ln2.width < 300)
ln2.width += 2;
else if (ln3.width < 300)
ln3.width += 2;
else
removeEventListener(Event.ENTER_FRAME, drawLine);
}
}
]]>
</fx:Script>HTH FTQuest
https://stackoverflow.com/questions/5043662
复制相似问题