我需要在Flex中开发一个动画,模拟某人手写带有动态内容的文本区域。 我并不关心字体的实际曲线下的笔,但是我需要一种干净的方式来逐行显示文本,,并使用一个跟随笔位置的面具。
像这样,但使用原生textarea和我自己的字体:
http://activeden.net/item/handwriting-animation-tool-v25/11733
mxml中的textarea只能有一个掩码,所以我想我应该以编程方式创建我的掩码。 有没有人这样做过?
谢谢
答案 0 :(得分:3)
有一些不同的技术可以创造真正的效果 - 就像网站上显示的那样。请注意,这是相当繁琐的工作。 你可以在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