0

我将 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 带到可见区域。我有两个函数,一个用于移动,一个用于移动,通过对 mc.x 属性使用补间动画。每个相关的点击事件;我必须将当前 mc 移出并制作 alpha 0,一旦完成,移入新的当前目标并制作 alpha 1。

不知何故,我必须将这两个补间结合到一个函数中。这是我被卡住的部分。或者可能将这些 mcs 放在两个不同的数组中,这不是正确的方法。我可以很容易地在根的 Enter Frame 事件上实现我想要的,以检查 cCat_Sel 和 cScr_Sel 变量,并一个接一个地执行这两个动画,但似乎 enter frame 使用了太多的 cpu 并且使它变慢并且可能不优选。

愿意尝试任何人的建议或指导。提前致谢。我根本没有任何正式或非正式的编程教育,但我通过阅读和尝试一些事情来完成工作,根据 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 次影片剪辑要么没有到达目的地,要么当前和以前的两个目标都显示,而且也没有到达预期的位置。这只发生在按钮单击事件快速连续发生时。再次感谢

4

1 回答 1

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_SelcCat_Sel根据您的需要进行设置。

于 2013-03-07T21:55:59.783 回答