拍摄快照,缩放并重复

时间:2012-04-01 11:31:38

标签: flex bitmap flex4 effects flex-spark

我正在尝试将文字从1缩放到5,这是一种放大的外观类型。我正在使用以下代码:

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

文字非常严重。因此,我的目标是以大字体拍摄文本标签的快照,将其添加到显示列表,将比例设置为第5,然后将比例设置为1的动画。之后我必须再次设置文本并执行一遍又一遍。

这是一个Flex应用程序,这就是我的问题所在。我不知道如何拍摄快照,然后将其添加到(组?)然后如何删除它并重新开始?任何建议中的任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是一种非常简单的方法,可以为fontSize样式设置动画,而不是为缩放属性设置动画:

根据你正在做的事情,这可能表现不佳b / c它会如此频繁地设置新风格。此外,如果你慢慢播放这个动画,它看起来像个别角色“摇摆”(他们移动或摇晃一点点)。

我会发布一些关于拍摄快照并缩小下一步的内容......

<?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>