繁体   English   中英

使用as3移入一组动画片段的补间动画

[英]move in move out tween animation for group of movieclips using as3

我将6个动画片段设置为array_0,将6个动画片段设置为array_1。 对于不同的屏幕,这就像两个选择。 这两个数组都作为all_array嵌套在另一个数组中。 在初始加载时,所有12个动画片段都定位为相同的x和y,并且在可见阶段之外。 我想使用两个不同的全局变量进行索引。 例如,cCat_Sel的范围是0-5,另一个cScr_Sel的范围是0-1。 在舞台上的六个按钮将对象分开(每个类别的每个按钮)时,将更改cCat_Sel。

因此它将根据cScr_Sel的值显示每个类别的内容。 如果cScr_Sel为0,则它​​将使用all_array [0] [cCat_Sel]访问当前目标,并以与all_array [1] [cCat_Sel]相似的方式分别访问值为1的数组

我已经完成了所有工作,包括所有补间动画,以移动当前目标并使之可见。 但是补间不会将第二组mcs带到可见区域。 我有两个函数,一个用于移动,另一个用于通过将补间动画用于mc.x属性来移出。 每个相关的点击事件; 我必须将当前mc移出并设置alpha 0,一旦完成,请移入新的当前目标并设置alpha 1。

我必须以某种方式将这两个补间合并到一个函数中。 这就是我卡住的部分。 或将这些mc放置在两个不同的阵列中不是正确的方法。 我可以很容易地在根的Enter Frame事件上实现所需的功能,以检查cCat_Sel和cScr_Sel变量,然后一个接一个地执行两个动画,但是好像enter frame使用了太多的cpu并使其变慢,并且可能不受欢迎。

愿意尝试任何人的建议或指导。 提前致谢。 我根本没有任何正规或非正式的编程教育,但我可以通过阅读和尝试一些关于stackoverflow问题和答案以及有时使用google的方法来使事情正常进行。 因为我的大部分答案都是从堆栈溢出中找到的。 更新:

        function fnSlideInOut(cMc:Object, pMc:Object){
        var HideX:Number =650;
        var ShowX:Number = 0;
        if(cMc != null){
            if(cMc.x != ShowX){
                //cMc.alpha = 1;
                var SlideMcIn:Tween = new Tween(cMc, "x", Strong.easeOut, 650, ShowX, 0.5, true);
                SlideMcIn.addEventListener(TweenEvent.MOTION_FINISH, fnSlideInFinish);
                SlideMcIn.start();
            }
        }
        if(pMc != null){
            if(pMc.x != HideX){
                //pMc.alpha = 1;
                var SlideMcOut:Tween = new Tween(pMc, "x", Strong.easeOut, 0, HideX, 0.5, true);
                SlideMcOut.addEventListener(TweenEvent.MOTION_FINISH, fnSlideOutFinish);
                SlideMcOut.start();
            }
        }

        function fnSlideOutFinish(e:TweenEvent){
            //SlideMcOut.obj.alpha = 0;
            SlideMcOut.removeEventListener(TweenEvent.MOTION_FINISH, fnSlideOutFinish);
            }
        function fnSlideInFinish(e:TweenEvent){
            //SlideMcIn.obj.alpha = 1;
            SlideMcIn.removeEventListener(TweenEvent.MOTION_FINISH, fnSlideInFinish);
            }
    }//End Function
fnSlideInOut(cScr_Sel, pScr_Sel);

我希望您的专家对以上代码的任何类型的错误发表评论。 它可以工作99次,但是动画片段不能到达目标的时间只有1次,或者当前和先前的两个目标都没有显示,也没有到达它们预期的位置。 这仅在快速连续发生按钮单击事件时发生。 再次感谢

一种选择是使用第三方库,例如TweenLite 这样,您就可以轻松在第一个动画完成后立即运行第二个动画:

private function startAnimation():void
{
    var mcToHide:MovieClip = all_array[cScr_Sel][cCat_Sel];
    TweenLite.to(mcToHide, 1, {x: HIDDEN_X_POSITION, y:HIDDEN_Y_POSITION, alpha:0, onComplete:finishAnimation});
}

private function finishAnimation():void
{
    var mcToShow:MovieClip = all_array[(cScr_Sel + 1) % 2][cCat_Sel];
    TweenLite.to(mcToShow, 1, {x: VISIBLE_X_POSITION, y:VISIBLE_Y_POSITION, alpha:1});
}

然后,您可以在相关的鼠标单击事件上并根据需要设置cScr_SelcCat_Sel后,调用startAnimation()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM