收藏本站
 
设为主页
     您的位置:首页资源库动画制作Flash教程
== 资 源 搜 索 ==
 
高级搜索
== 学 习 资 源 ==
操 作 系 统
Windows DOS
Linux Unix
Novell OS/2
办 公 软 件
Word Excel
Access Powerpoint
Outlook Wps
媒 体 处 理
网页制作 动画制作
图片处理 视频处理
媒体播放 音频处理
课件制作 其它……
网 络 工 具
网页浏览 下载工具
FTP 工具 邮件工具
网络安全 服 务 器
联络聊天 其它……
工 具 软 件
压缩工具 系统工具
文件工具 磁盘工具
病毒防治 阅读工具
测试工具 程序设计
== 素 材 资 源 ==
GIF动画 Flash动画
按钮图库 图标图库
线条图库 背景图库
创意图库 音频素材
== 教 程 下 载 ==
 
Action for Flash5:海浪效果

作者:pope / eNet技术

 

先来看看效果:


  我的思路是这样的,先制作一个框架,里面包含一些物体,当鼠标指针定位在框架内部时,我想要框架内的物体有大小和透明度的变化,而且这种变化还可以依据鼠标指针和物件的距离变化而变化,另一方面,当鼠标移到框架之外时,我就要框架内的物件回到初始状态,就像海浪似的,汹涌澎湃的冲到岸上来,然后又缓缓的退了回去。好,请先下载源文件

结构

打开源文件,在主场景里,你可以看到一个名为“01-boundingbox”的MC,在第一帧上有三条行为动作,因为有些浏览者会将Flash影片全屏观看或者拖动改变它的大小,这样会使的这个例子的效果不明显,为了防止这样,我们在第一帧上设置如下行为动作:

FS Command ("fullscreen", "false")

FS Command ("allowscale", "false")

Stop

在“01-boundingbox”里,你将看到三个层,包含一个空的MC,一个框架和一些物件,物件的名字为“column1”,这里也只有一帧,一个行为动作,包含一段代码,一个名为“dragscale”的MC的中心显示在场景里,这是必须的,我们将利用它确定鼠标指针和物件之间的距离:

Start Drag ("dragscale", lockcenter)

在“column1”里的第二帧,是至关紧要的行为动作,第三帧的简单的Action可以保证第二帧不断的反复运行。

Go to and Play (2)

你可以注意到这里有二十个层,第一层包括行为动作和静止的物件,另外的第一到第十九层都是静止的物件,这样可以保证鼠标指针在框架外部时物件不会变化大小,每一个物件都取了一个名字,从“text1”到“text19”。

在第二帧,你可以看到如下的Action:

Set Variable: "colnum" = 1

Set Variable: "startnum" = 1

Set Variable: "endnum" = 19

Set Variable: "numberofItems" = 19

Set Variable: "mouseposX" = Int ( GetProperty ( "../dragscale", _x ) )

Set Variable: "mouseposY" = Int ( GetProperty ( "../dragscale", _y ) )

Set Variable: "i" = startnum

Set Variable: "m" = startnum+1

Set Variable: "filledSpace" = 0

Set Variable: "gapspace" = 0

If (myInit = FALSE)

Loop While (i <= endnum)

Set Variable: "textY" & i = GetProperty ("text" & i, _y )

Set Variable: "i" = i + 1

End Loop

Set Variable: "i" = startnum

Set Variable: "myInit" = TRUE

End If

Set Variable: "boundleft" = GetProperty ("../boundbox" & colnum, _x)

Set Variable: "boundright" = boundleft + GetProperty ("../boundbox" & colnum, _width)

Set Variable: "boundtop" = GetProperty ("../boundbox" & colnum, _y)

Set Variable: "boundbottom" = boundtop + GetProperty ("../boundbox" & colnum,_height)


  第一个变量是指框架的数目,因此,我们定位在框架里的第一个“column1”,下面三个变量指第一个物件和最后一个物件,以及所有物件的数目,我们确定鼠标指针相关的两个变量“mouseposX”当前所在的X轴位置和“mouseposY”当前所在的Y轴位置,此外,我们要计数循环的次数,命名为“i”和“m”。最后,我们重新安排两个变量,“filledSpace”和“gapSpace”,我们将在后面讨论它们。

  既然我们想要物件有一个原始的位置,我们需要建立一个数组,来保存这些原始的数值。当我们将每个物件的垂直位置都存储以后,我们将重新设置“i”以便保证行为动作只执行一次,设置“myInit”为真,如果“myInit”为假,则Action不执行。这里要提及的是,我们只需要物件的比例和透明度值变化,如果鼠标在框架内部,我们就得知道边界在哪里,下面四个变量将存储这些值。最后我们就得有两种变化,鼠标的位置在框架外面还是框架里面。

好,接着我们就有了下面的代码:


If (mouseposX>= boundleft and mouseposX <= boundright and mouseposY>= boundtop and mouseposY <= boundbottom)

Loop While (i <= endnum)

Set Variable: "myDif" = (EVAL("textY" & i) ) - (mouseposY-boundtop)

Set Variable: "scaleAmount" = 250 - ((myDif*myDif) /16)

Set Variable: "alphaAmount" = 100 - ((myDif*myDif) / 6)

If (scaleAmount <100)

Set Variable: "scaleAmount" = 100

End If

If (alphaAmount <50)

Set Variable: "alphaAmount" = 50

End If

Set Property ("text" & i, X Scale) = scaleAmount

Set Property ("text" & i, Y Scale) = scaleAmount

Set Property ("text" & i, Alpha) = alphaAmount

Set Variable: "i" = i + 1

End Loop

Loop While (m <= endnum - 1)

Set Variable: "filledSpace" = filledSpace + GetProperty ( "text" & m, _height)

Set Variable: "m" = m + 1

End Loop

Set Variable: "totalheight" = GetProperty ( "text" & endnum, _y) - GetProperty ( "text" & startnum, _y)

Set Variable: "gapSpace" = totalheight - filledSpace

Set Variable: "avgDistance" = gapSpace / numberofitems

Set Variable: "m" = startnum + 1

Loop While (m <= endnum - 1)

Set Property ("text" & m, Y Position) = (GetProperty ( "text" & (m-1), _y) + GetProperty ( "text" & (m-1), _height)) + avgdistance

Set Variable: "m" = m + 1

End Loop


  首先,如果鼠标在框架内部,我们就需要计算每一个物件和鼠标指针之间的距离,这将是一个多次的循环计算,我们首先得确定鼠标与顶部的距离,这是必须的,因为每一个物件和鼠标的距离都不一样,物件和鼠标的距离就是物件的垂直高度减去鼠标离顶部的高度,我们可以计算出来。
  当我们计算出了鼠标与物件的距离后,我们可以利用这个值“myDif”来确定物件的比例和透明度的值,你可以看到“scaleAmount”这个变量,注意到它是依靠“myDif”值变化的,如果“myDif”值为零,那么“scaleAmount”值为250(最大),“myDif”值越大,“scaleAmount”值越小,即距离越远,变化就越小,而“myDif”是一个正方形区域,所以鼠标周围的变化也是对称的。举个例子,有两个物件,“myDif”等于-5和5,这两个物件将是相同的变化,因为(-5)*(-5)=25,5*5=25,如果“myDif”不是正方形区域,只是用16来划分(数字越大,得到的变化越大),真实的距离可以得到真实的变化,这样的结果不是很完美,我们希望能得到像海浪那样的效果,有一个最高点的变化,透明度的值也是用同样的方法计算,唯一不同的是最大值为100,最小值50,我们用100代替250,用6代替16,因为_xscale和_yscale标准的百分数值默认设置为100,我们将在使用Set Property行为时使用他们。

  最后,我们要确定物件的距离,当鼠标定位在框架内部时,同样,我们需要计算物件之间的平均距离。所以,我们需要找到物件之间的填充距离filledSpace,它是整个物件的高度,除了第一个和最后一个,因为他们是空的,和第一个与最后一个之间的全部空间。整个空间减去全部物件的高度值即为填充高度。为求得平均值,我们用这个高度去除以所有的物件数。计算除了平均距离以后,我们使用Set Property行为将值赋予物件,物件将依照前一个电影符号的位置和高度来确定增加平均值。

回到原始状态


Else

Set Variable: "i" = startnum

Loop While (i <= endnum)

If (int ( GetProperty ("text" & i, _yscale ) )> 100)

Set Property ("text" & i, Y Scale) = Int ( GetProperty ("text" & i, _yscale ) ) - 1

Set Property ("text" & i, X Scale) = Int ( GetProperty ("text" & i, _xscale ) ) -1

End If

If ( GetProperty ("text" & i, _y) EVAL("textY" & i))

Set Property ("text" & i, Y Position) = Int ( GetProperty ("text" & i, _y ) ) - 1

End If

If ( GetProperty ("text" & i, _Alpha)> 50)

Set Property ("text" & i, Alpha) = Int ( GetProperty ("text" & i, _alpha ) ) - 1

End If

Set Variable: "i" = i + 1

End Loop

End If

  在一开始还有另外一种状态,即鼠标不在框架内部时所有的物件都将回到初始状态。因此,我们必须确定每一个物件的比例获透明度是否和初始时一样,他们的垂直位置是否大于或小于初始值,这里又是一个循环检查。如果比例大于初始值即100,我们将比例值减小1,如果透明度值大于初始值50,我们同样将其减少1,如果垂直位置大于初始值,我们将其减小1,如果垂直位置小于初始值,我们就增加1。

自定义文件

  如果建立多个这样的例子,你需要在“01-boundingbox”里增加框架。第二个框架可以取名“boundbox2”,第三个可以取名“boundbox3”如此类推。增加好以后,物件都需安放好相应的框架里,而在第二帧里的四个变量将依照框架数,开始物件数,最后的物件数,和全部物件数确定。例如第二个物件群,在第二个框架内,你可以设置不同的框架内有不同的效果产生,只需设置变动最大值,最小值和拆分的变量“scaleAmount”和“alphaAmount”。

[上一页] [下一页]

 

Copyright © 2001-2002 东莞中学信息技术科 All Rights Reserved
IE4.0 or later / 800*600  For The Best View