Flash 特效步步高(八)——迭加层
作者:施叶楠 来源:Chinabite 添加时间:2006-5-21 11:55:471 创建4个Movie Clip,将他们放进主Scene里,并分别起Instance Name为Window1--Window4,
注意,这4个MC并不是放在“可见”区域内的(请看源程序);之后在第一个KeyFrame里加入如下Frame action:
Set Variable: "Counter" = 1
Set Variable: "NumWin" = 4
Loop While (Counter < (NumWin + 1))
Set Variable: "WinName" = "/window"&counter
Duplicate Movie Clip (WinName, "NewWin"&Counter, (NumWin-Counter)+1) Set Property ("NewWin"&Counter, X Position) = Counter * 30
Set Property ("NewWin"&Counter, Y Position) = Counter * 30
Set Variable: "WindowOrder"&Counter = Counter
Set Variable: "Counter" = Counter + 1
End Loop
这里用到了loop语句,作用是:创建4个我们将在最终Movie里看到的窗口(NewWin1---NewWin4)。特别要注意的是,语句中如何设定各个窗口的深度(Depth,这是决定显示顺序的一个属性):NewWin1的深度值最大,因为他显示在最前面。依次类推,凡是深度值大的窗口便叠加在深度值小的上面。同时,语句中还创建了一个数组Windoworder1---Windoworder4,每个元素的值分别代表了窗口的顺序。这些值将在后面重新计算各个窗口顺序时用到。
2 接下来这步我们要做的就是实现当某个窗口被点击后会跳到前台显示,而其他的则隐藏到后面去。
首先,在每个窗口的MC里放一个隐藏按钮,并加入如下Action:
On (Release)
Set Variable: "/:NewTop" = 1
Call ("/control:Redraw")
End On
意思是:当某个窗口被击中时,这个窗口的当前值便被赋给了变量(/:NewTop),然后,用Call命令调用在下面要讲的Cnotrol里的Redraw里的一系列Action。
这些Action,看似很长,实则:先将数组里的所有WindowOrder值copy到一个临时数组(TempWinOrder)中,以便下面调用;然后令/:WindowOrder1 值 =/:NewTop;接着,用一个loop语句扫描TempWinOrder数组,检查其值是否等于/:WindowOrder1,他将适当的值Copy给/:WindowOrder。就这样.
3 让我们来将上述具体化一下,便于理解:假设窗口顺序值为1234(即/:WindowOrder1 = 1, /:WindowOrder2 = 2, /:WindowOrder3 = 3, /:WindowOrder4 = 4),并假设/NewWin3被点击。则,首先/:NewTop 值被设为3。然后,/:WindowOrder 的值被Copy到TempWinOrder,接着 /:WindowOrder1的值被设定为和 /:NewTop的值相等(本例为3)。
最后,循环语句查找TempWinOrder数组,是否有值等于/:NewTop=3:
TempWinOrder1 = 1, 因此 /:WindowOrder2= 1;
TempWinOrder2 = 2, 因此/:WindowOrder3= 2;
TempWinOrder3 = 3, 因此进入下一个循环;
TempWinOrder4 = 4, 因此/:WindowOrder4= 4.
这样的结果是:窗口的顺序由1234变成了3124。
4 一切即将结束,我们只需用Removie MovieClip命令来删除先前的窗口,再根据/:WindowOrder 提供的顺序,用Duplicate Movie Clip重新画出窗口排列就可以了。请看源程序里Control里的Redraw Action,一切都很清楚。
站内搜索