2013-03-07 111 views
0

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

因此它会根据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变量,并且一个接一个地执行这两个动画,但它看起来像输入帧使用了太多的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次影片剪辑或者没有到达目的地,或者当前和之前的两个目标都显示,而且这些目标也不在他们所设想的位置。这只发生在快速连续发生按钮点击事件时。再次感谢

回答

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因此您的需求。

+0

我看着tweenLite链接,似乎我需要一些时间来进入它。但看起来很彻底。我相信这将长期帮助我。我一直在其他网站上看到Tweenlite。我看了一些可能性。它简直太棒了,天空是极限。在Flash的Tween中建立的是如此原始,如此充满垃圾。如果我可以使用内置的Tween类使其可行,我将上传解决方案。非常感谢您提供快速回答并展示处理这种情况的正确方法。 – user2145746 2013-03-07 23:47:38

+0

那么,根据我的经验,你并不需要时间跳进TweenLite并开始使用它。除了向我的样本中添加进口产品外,这也是您需要做的所有事情。无论如何,我很高兴它可以帮助您 – duTr 2013-03-08 01:59:53

+0

再次感谢。我最终肯定会使用TweenLite。我也确信你的代码会起作用。但这是我做出了一个快速解决方案。这不是很好,但它是我周一截止日期的临时解决方案。 – user2145746 2013-03-08 02:10:28