Делая снимок, масштабируя его и повторяя - PullRequest
0 голосов
/ 01 апреля 2012

Я пытаюсь масштабировать текст от 1 до 5, что-то вроде увеличения типа взгляда.Я использую код ниже:

<s:Scale target="myLabel" autoCenterTransform="true" 
         duration="2000" 
         scaleYFrom="1" scaleYTo="5" scaleXFrom="1" scaleXTo="5"
         >

Текст масштабируется ужасно.Поэтому моя цель - сделать снимок текстовой метки крупным шрифтом, добавить его в список отображения, установить 5-й масштаб, а затем анимировать масштаб до 1. После этого мне нужно снова установить текст и сделатьвсе снова и снова.

Это приложение Flex, и вот тут возникает мой вопрос. Я не знаю, как сделать снимок, что добавить в (группу?), А затем как его удалить и начать заново.?Любой совет в любом из этого был бы оценен.

1 Ответ

2 голосов
/ 01 апреля 2012

Вот очень простой подход, который анимирует стиль fontSize, а не анимирует свойства масштаба:

В зависимости от того, что вы делаете, это может не работать хорошо, потому что он / она часто устанавливает новый стиль,Кроме того, если вы играете эту анимацию медленно, она выглядит как «колебание» отдельных персонажей (они немного двигаются или трясутся).

Я опубликую кое-что о снимке и масштабировании следующего ...

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955" minHeight="600">
    <fx:Declarations>
        <s:Animate id="scaler" target="{scaledText}" >
            <s:MotionPath property="fontSize">
                <s:Keyframe time="0" value="12"/>
                <s:Keyframe time="1500" value="48"/>
            </s:MotionPath>
        </s:Animate>
    </fx:Declarations>

    <fx:Script>
        <![CDATA[

            protected function onLabelClick():void
            {
                scaler.play();
            }

        ]]>
    </fx:Script>

    <s:Label id="scaledText" text="this is some text" click="onLabelClick()" />
</s:Application>

И вот подход, который делает снимок текста.Это та же проблема, что и у вашего исходного решения, масштабированный текст очень зазубренный.Но это показывает, как сделать снимок чего-либо и использовать снимок в другом объекте Flex:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955" minHeight="600">
    <fx:Declarations>
        <s:Scale id="scaler" target="{drawingTarget}" scaleXFrom="1" scaleXTo="5" scaleYFrom="1" scaleYTo="5"/>
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            import spark.core.SpriteVisualElement;

            protected function onLabelClick():void
            {
                var data:BitmapData = new BitmapData(200,200,true, 0xFFFFFF);
                data.draw(scaledText);

                var g:Graphics = drawingTarget.graphics;
                g.beginBitmapFill(data);
                g.drawRect(0,0, 200,200);
                g.endFill();
            }

            protected function onBitmapClick(event:MouseEvent):void
            {
                scaler.play();
            }

        ]]>
    </fx:Script>

    <s:layout>
        <s:VerticalLayout/>
    </s:layout>

    <s:Label id="scaledText" text="this is some text" click="onLabelClick()" />
    <s:SpriteVisualElement id="drawingTarget" width="200" height="200" click="onBitmapClick(event)"/>
</s:Application>
...