移动使用as3移出动画片组动画片段

时间:2013-03-07 19:44:10

标签: actionscript-3

我将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]来访问当前目标,并使用类似的相应数组作为值1,如all_array [1] [cCat_Sel]

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

不知何故,我必须在一个函数中组合这两个补间。这是我被卡住的部分。或者可能将这些mcs放在两个不同的阵列中而不是正确的方法。我可以轻松地在Root的Enter Frame事件上实现我想要的东西来检查cCat_Sel和cScr_Sel变量,并且一个接一个地做两个动画但是看起来输入框架使用了太多的cpu并且使它变慢并且可能不是优选的。 / p>

愿意尝试任何人的建议或指导。提前致谢。 我根本没有任何正式或非正式的编程教育,但我通过阅读和尝试按照stackoverflow问题和答案,有时谷歌的一些东西来工作。因为我从堆栈溢出中找到了大部分答案。 更新:

        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次电影剪辑要么没有到达目的地,要么当前和之前的两个目标都显示出来,而这也不是他们想要的地方。仅当按钮单击事件快速连续发生时才会发生这种情况。再次感谢

1 个答案:

答案 0 :(得分:0)

选项可能是使用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});
}

然后,您可以根据需要设置startAnimation()cScr_Sel,然后根据相关鼠标点击事件致电cCat_Sel

相关问题