当褪色效果发生时,为什么这个移动效果对我的精灵不起作用?

时间:2011-02-08 00:46:31

标签: flex actionscript-3 animation sprite move

有人可以解释为什么这不想工作?在徽标后面有点装饰。

当dMove var被注释掉时,我在x = 78轴的随机点上得到适当的正方形淡入淡出区域,但是在引入时没有任何东西出现...

private var floatBG:UIComponent = new UIComponent();

private function addDP(event:TimerEvent):void{  

            var dY:Number = 5+Math.ceil(Math.random()*60);
            var dSize:Number = Math.ceil(Math.random()*12);
            var dAlpha:Number = Math.random()*0.5 + 0.2
            var dDuration:Number = Math.ceil(Math.random()*5000) + 1000;

            var d:Sprite = new Sprite();
            d.graphics.beginFill(0x1C75BC,dAlpha);
            d.graphics.drawRect(78, dY, dSize,dSize);
            d.graphics.endFill();

            floatBG.addChild(d);

            var dMove:Move = new Move(d);
            dMove.xBy = 300;
            dMove.duration = dDuration;

            dMove.play();

            var dFade:Fade = new Fade(d);
            dFade.alphaFrom = 1;
            dFade.alphaTo = 0;
            dFade.duration = dDuration;

            dFade.play();

            this.addElement(floatBG);

        }

此外,在每个周期结束时销毁精灵的最佳/正确方法是什么?

提前多多感谢,非常感谢!

约什

2 个答案:

答案 0 :(得分:2)

好的,所以经过一段时间的努力,我找到了一个解决方案,我非常感谢Brian Bishop的帮助,他非常感谢我指出了正确的方向。

正如Brian建议的那样,只需输入d作为UIComponent,而不是sprite允许dMove生效(我仍然不确定为什么会这样,{{1}当它仍然是精灵时效果有效)。但是,每次添加dFade(BG为背景,添加了所有d UIComponent的UIComponent)都是不必要的,因此我将floatBG部分作为this.addElement(floatBG)函数的一部分

然后我遇到了应用程序开始填充d实例的问题(d原来代表“datapoint”,这是我试图创建的效果的主题,一个羽毛他们),并逐步减慢应用程序的速度。要连续添加d元素是必要的,因为它是位于屏幕一角的徽标的一部分,看起来像我可以做到的那样漂亮......

最终我来到了下面的解决方案,其关键是加载creationComplete 600个虚拟UIComponents,然后在floatBG函数的每个循环中添加一个移动的addDP UIComponent到d并从其包含的子数组中删除另一个UIComponent。

因此,最终它看起来像这样:

floatBG

好的,如果这很啰嗦道歉,但有人可能觉得它很有用......这是一个很好的效果(无论如何我都这么认为)

我使用蒙版为d元素出现的点提供了锐利的边缘。或者,可以将它放在另一个对象后面,但如果在我的情况下,对象是一条宽度小于某些d元素大小的行,则需要这样的掩码。

颜色在开头被声明为变量,因为我可能会添加一个函数来在点击时更改它或类似的东西。

谢谢!

约什

答案 1 :(得分:1)

我在Flex 4中运行了这个,只是我做的改变是使用UIComponent而不是spirte,这很好。也许您使用的是纯AS3项目?他们玩之后不确定是否在摧毁。

<?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:Script>
        <![CDATA[
            import mx.core.UIComponent;
            import mx.effects.Fade;
            import mx.effects.Move;

            private var floatBG:UIComponent = new UIComponent();

            private function addDP(event:TimerEvent):void{  

                var dY:Number = 5+Math.ceil(Math.random()*60);
                var dSize:Number = Math.ceil(Math.random()*12);
                var dAlpha:Number = Math.random()*0.5 + 0.2
                var dDuration:Number = Math.ceil(Math.random()*5000) + 1000;

                var d:UIComponent = new UIComponent();
                d.graphics.beginFill(0x1C75BC,dAlpha);
                d.graphics.drawRect(78, dY, dSize,dSize);
                d.graphics.endFill();


                floatBG.addChild(d);

                var dMove:Move = new Move(d);
                dMove.xBy = 300;
                dMove.duration = dDuration;

                dMove.play(); 

                var dFade:Fade = new Fade(d);
                dFade.alphaFrom = 1;
                dFade.alphaTo = 0;
                dFade.duration = dDuration;

                dFade.play();

                this.addElement(floatBG);

            }

            private function onClick():void{
                var t:Timer = new Timer(100, 10);
                t.start();
                t.addEventListener(TimerEvent.TIMER, addDP);
            }

        ]]>
    </fx:Script>

    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:Button click="onClick()" />
</s:Application>