Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 为什么这个移动效果在我的精灵上不起作用,而淡入淡出效果却起作用?_Apache Flex_Actionscript 3_Animation_Sprite_Move - Fatal编程技术网

Apache flex 为什么这个移动效果在我的精灵上不起作用,而淡入淡出效果却起作用?

Apache flex 为什么这个移动效果在我的精灵上不起作用,而淡入淡出效果却起作用?,apache-flex,actionscript-3,animation,sprite,move,Apache 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);

有人能解释一下为什么这不起作用吗?这是一个标志后面的一点装饰

当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);

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

提前多谢,非常感谢


Josh

我在Flex4中运行了这个,唯一的改变是使用UIComponent而不是Sprite,这很好。也许你在使用纯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>

我在Flex4中运行了这个程序,唯一的改变是使用UIComponent而不是Sprite,这很好用。也许你在使用纯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>

好的,经过一番尝试,我找到了一个解决方案,我非常感谢Brian Bishop的帮助,他为我指明了正确的方向

正如Brian所建议的,只需将
d
作为UIComponent而不是
sprite
输入,就可以让
dMove
生效(我仍然不确定这是为什么,因为
dFade
效果在它还是sprite时起作用)。但是每次添加
floatBG
(BG是后台,所有UID组件都添加到UIComponent中)是不必要的,所以我将
这个.addElement(floatBG)
作为我的
creationComplete
函数的一部分

然后,我遇到了应用程序开始填充d实例的问题(顺便说一句,d最初代表“datapoint”,这是我试图创建的效果的主题,一系列实例),并逐渐将应用程序拖慢到爬行状态。持续添加d元素是必要的,因为它是位于屏幕角落的徽标的一部分,看起来尽可能漂亮

最终我找到了下面的解决方案,其关键是加载带有600个虚拟UIComponents的
floatBG
,然后在
addDP
函数的每个周期中,都向
floatBG
添加一个移动的
d
UIComponent,并从它包含的子数组中删除另一个UIComponent

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

<?xml version="1.0" encoding="utf-8"?><s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init(event)">

<fx:Script>
    <![CDATA[

        import mx.core.DesignLayer;
        import mx.core.UIComponent;
        import mx.effects.effectClasses.MoveInstance;
        import mx.events.EffectEvent;
        import mx.events.FlexEvent;
        import mx.states.RemoveChild;

        import spark.effects.AnimateColor;
        import spark.effects.AnimateFilter;
        import spark.effects.Fade;
        import spark.effects.Move;
        import spark.effects.Rotate;
        import spark.effects.easing.Sine;

        private var floatBG:UIComponent = new UIComponent;

        private var floatColour:uint = 0x1C75BC

        protected function init(event:FlexEvent):void
        {   

            //Float BackGround set up
            floatBG.mask = floatMaskBlock;
            floatBG.depth = -1;

            this.addElement(floatBG);


            //Fill FloatBG with 600 filler elements
                for(var i:int=0; i<600; i++)
                {
                    var filler:UIComponent = new UIComponent;
                    floatBG.addChild(filler);
                }
            //Float Animation Timer

            var floatTimer:Timer = new Timer(1,0);
            floatTimer.addEventListener(TimerEvent.TIMER,DPstartup)
            floatTimer.start();

        private function DPstartup(event:TimerEvent):void
        {
            this.addDP(5,60)
            this.addDP(22,14);
            this.addDP(18,18);
        }

        private function addDP(yf:Number,yt:Number):void
        {   
            this.title.text = floatBG.numChildren.toString();

            var dY:Number = yf+Math.ceil(Math.random()*yt);
            var dXby:Number = Math.ceil(Math.random()*1000 + 50);
            var dSize:Number = Math.ceil(Math.random()*12);
            var dAlpha:Number = Math.random()*0.5 + 0.2
            var dMotionDuration:Number = Math.ceil(Math.random()*15000) + 1000;
            var dFadeDuration:Number = Math.random()*dMotionDuration;

            var d:UIComponent = new UIComponent;

            d.graphics.beginFill(floatColour,dAlpha);
            d.graphics.drawRect(78, dY, dSize,dSize);
            d.graphics.endFill();

            var dMove:Move = new Move(d);
            dMove.xBy = dXby;
            dMove.duration = dMotionDuration;
            dMove.easer = Linear;

            dMove.play();

            var dFade:Fade = new Fade(d);
            dFade.alphaFrom = dAlpha;
            dFade.alphaTo = 0;
            dFade.duration = dFadeDuration;

            dFade.play();

            floatBG.addChild(d);
            floatBG.removeChildAt(0);
        };
    ]]>
</fx:Script>

<fx:Declarations>       
    <s:Sine id="Sine"/>
    <s:Bounce id="Bounce"/>
    <s:Linear id="Linear"/>     
</fx:Declarations>

<s:Group x="88" width="1000" height="80" id="floatMaskBlock">
    <s:Rect width="100%" height="100%">
        <s:fill>
            <s:SolidColor color="0xffffff"/>
        </s:fill>
    </s:Rect>
</s:Group></s:Group>

好吧,抱歉,如果这是相当冗长的话,但有人可能会发现它有用。。。这是一个很好的效果(无论如何我也这么认为)

我使用遮罩为d元素出现的点提供锐利的边缘。或者你可以把它放在另一个物体的后面,但是如果,像我的例子一样,这个物体是一条宽度小于一些d元素大小的线,那么这样的遮罩是必要的

颜色在开始时声明为一个变量,因为我可能会添加一个函数,在单击或类似操作时对其进行更改

谢谢


Josh

好的,经过一番尝试,我找到了一个解决方案,我非常感谢Brian Bishop的帮助,他为我指明了正确的方向

正如Brian所建议的,只需将
d
作为UIComponent而不是
sprite
输入,就可以让
dMove
生效(我仍然不确定这是为什么,因为
dFade
效果在它还是sprite时起作用)。但是每次添加
floatBG
(BG是后台,所有UID组件都添加到UIComponent中)是不必要的,所以我将
这个.addElement(floatBG)
作为我的
creationComplete
函数的一部分

然后,我遇到了应用程序开始填充d实例的问题(顺便说一句,d最初代表“datapoint”,这是我试图创建的效果的主题,一系列实例),并逐渐将应用程序拖慢到爬行状态。持续添加d元素是必要的,因为它是位于屏幕角落的徽标的一部分,看起来尽可能漂亮

最终我找到了下面的解决方案,其关键是加载带有600个虚拟UIComponents的
floatBG
,然后在
addDP
函数的每个周期中,都向
floatBG
添加一个移动的
d
UIComponent,并从它包含的子数组中删除另一个UIComponent

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

<?xml version="1.0" encoding="utf-8"?><s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init(event)">

<fx:Script>
    <![CDATA[

        import mx.core.DesignLayer;
        import mx.core.UIComponent;
        import mx.effects.effectClasses.MoveInstance;
        import mx.events.EffectEvent;
        import mx.events.FlexEvent;
        import mx.states.RemoveChild;

        import spark.effects.AnimateColor;
        import spark.effects.AnimateFilter;
        import spark.effects.Fade;
        import spark.effects.Move;
        import spark.effects.Rotate;
        import spark.effects.easing.Sine;

        private var floatBG:UIComponent = new UIComponent;

        private var floatColour:uint = 0x1C75BC

        protected function init(event:FlexEvent):void
        {   

            //Float BackGround set up
            floatBG.mask = floatMaskBlock;
            floatBG.depth = -1;

            this.addElement(floatBG);


            //Fill FloatBG with 600 filler elements
                for(var i:int=0; i<600; i++)
                {
                    var filler:UIComponent = new UIComponent;
                    floatBG.addChild(filler);
                }
            //Float Animation Timer

            var floatTimer:Timer = new Timer(1,0);
            floatTimer.addEventListener(TimerEvent.TIMER,DPstartup)
            floatTimer.start();

        private function DPstartup(event:TimerEvent):void
        {
            this.addDP(5,60)
            this.addDP(22,14);
            this.addDP(18,18);
        }

        private function addDP(yf:Number,yt:Number):void
        {   
            this.title.text = floatBG.numChildren.toString();

            var dY:Number = yf+Math.ceil(Math.random()*yt);
            var dXby:Number = Math.ceil(Math.random()*1000 + 50);
            var dSize:Number = Math.ceil(Math.random()*12);
            var dAlpha:Number = Math.random()*0.5 + 0.2
            var dMotionDuration:Number = Math.ceil(Math.random()*15000) + 1000;
            var dFadeDuration:Number = Math.random()*dMotionDuration;

            var d:UIComponent = new UIComponent;

            d.graphics.beginFill(floatColour,dAlpha);
            d.graphics.drawRect(78, dY, dSize,dSize);
            d.graphics.endFill();

            var dMove:Move = new Move(d);
            dMove.xBy = dXby;
            dMove.duration = dMotionDuration;
            dMove.easer = Linear;

            dMove.play();

            var dFade:Fade = new Fade(d);
            dFade.alphaFrom = dAlpha;
            dFade.alphaTo = 0;
            dFade.duration = dFadeDuration;

            dFade.play();

            floatBG.addChild(d);
            floatBG.removeChildAt(0);
        };
    ]]>
</fx:Script>

<fx:Declarations>       
    <s:Sine id="Sine"/>
    <s:Bounce id="Bounce"/>
    <s:Linear id="Linear"/>     
</fx:Declarations>

<s:Group x="88" width="1000" height="80" id="floatMaskBlock">
    <s:Rect width="100%" height="100%">
        <s:fill>
            <s:SolidColor color="0xffffff"/>
        </s:fill>
    </s:Rect>
</s:Group></s:Group>

好吧,抱歉,如果这是相当冗长的话,但有人可能会发现它有用。。。这是一个很好的效果(无论如何我也这么认为)

我使用遮罩为d元素出现的点提供锐利的边缘。或者你可以把它放在另一个物体的后面,但是如果,像我的例子一样,这个物体是一条宽度小于一些d元素大小的线,那么这样的遮罩是必要的

颜色在开始时声明为一个变量,因为我可能会添加一个函数,在单击或类似操作时对其进行更改

谢谢


Josh

我想问题出在Move类中。你也可以发布吗?@shortstick:Move是一个Flex框架类,不是一个定制类。我想问题出在Move类中。你也可以发布吗?@shortstick:Move是一个Flex框架类,不是定制的。太棒了,谢谢。一旦元素达到alpha=0状态,应该如何删除它们?因为floatBG是一个私有变量,只有它的副本被添加到stage中,这会删除它们自己(我非常确定)。如果执行“跟踪(this.numElements.toString());”在我的示例中使用this.addElement并对其进行调试之后,结果仅为ever 2(一个按钮和一个floatB