Многострочный почерк - PullRequest
       11

Многострочный почерк

3 голосов
/ 18 февраля 2011

Мне нужно разработать анимацию во Flex, которая бы имитировала кого-то, пишущего текстовую область с динамическим контентом.Меня не волнует, как перо следует фактическим кривым шрифта, но мне нужен чистый способ показывать текст построчно с маской, которая следует за положением пера.

Примерно так, но с нативной текстовой областью и моим собственным шрифтом:

http://activeden.net/item/handwriting-animation-tool-v25/11733

текстовая область в mxml может иметь только одну маску, поэтому я думаю, что я должен создать свою маскупрограммно.Кто-нибудь сделал это еще?

спасибо

1 Ответ

3 голосов
/ 19 февраля 2011

Существует несколько различных техник для создания истинного эффекта - например, того, что показано на этом сайте. И помните, что это довольно утомительная работа. Что вы можете сделать во 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>

НТН FTQuest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...