具有波形效果的Flash鼠标跟踪

Author: 郭涛 Date: 2000年 第15期

  鼠标跟踪的实现方法有两种。一种比较简单,不用Script语句。具体方法在《电脑报》第13期已经有朋友介绍过了,但这种方法做出的效果连续性不强,产生的效果很单一,并没有把Flash的真正魅力展现出来。还有一种方法,它能产生让人炫目的跟踪效果,而且有很强的连续性,哪怕你的鼠标只动一点点,它也能产生连续的跟踪效果。
  下面,将介绍一种带有缓冲效果的鼠标跟随,它在运动时就像一串机械波,波上的每一个部件都严格遵循物理规律(都像是波上的质点),给人很强的美感,会让你不停地挥动手中的鼠标,甚至忘掉要点击的按扭。
  首先,确定跟踪部件,比如“abcdefg”这一串字母,一会儿就将在你鼠标的指挥下翩翩起舞了。每一个字母要定为一个MC(movie clip),然后把他们一个个地拖到Scene(场景)中,排成一排(不用很整齐,因为拖动开始后会重新排列),给每个MC写上“instance name”,比如trail1、rail2、trial3、trial4到trial7(一共七个字母),注意命名时最后一个字要按数字顺序,以便下面循环赋值。还有,如果你不想让你的鼠标挡住第一个字母“a”的话,最好再加一个空的MC取名为“trail0”放在trail1的前面。
  下面我们开始制作产生跟踪效果的MC,就叫“action”吧。如^15040201a^1,在第一层(其实只用一层)点出三个关键帧(keyframe),第一个关键帧中的properties→action里(如^15040201b^2)写入如下Script。
  Set Variable: ″i″ = 7
  注:“i”是跟踪部件“instance name”的末尾数字最大值。本例中是trail7最大。
  Set Variable: ″a″ = 5
  注:如果把字母组成的字串看作是一个绳子的话,“a”就是绳子的弹性系数。
  Set Variable: ″b″ = 1.66
  注:“b”是跟随的速度,越小越快。如果你不想让你的字母串像一只蚯蚓一样在屏幕上爬,还是把它设在3以下。
  Set Variable: ″k″ = 12
  注:“k”是静止时每个字母的间距。
  Loop While (i>=0)
  注:开始循环,到i=0。
  Set Variable: ″/trail″&i&″:x_value″ = GetProperty (″/trail″&i,_x)
  注:当i =7时,此行对trail7:xvalue赋予trail7目前的x坐标。
  Set Variable: ″/trail″&i&″:y_value″ = GetProperty (″/trail″&i,_y)
  注:同上赋予y坐标。
  Set Variable: ″/trail″&i&″:vx″ = 0
  注:i=7使trail7:vx等于0,vx就是此部件与前面部件的x坐标差。
  Set Variable: ″/trail″&i&″:vy″ = 0
  注:同上,赋予vy等于0。
  Set Variable: ″i″ = i-1
  注: i自减1
  End Loop
  注:循环直到i=0跳出。
  Start Drag (″/trail0″, lockcenter)
  注:开始鼠标拖拉trail0,并置于鼠标中央。
  下面在第二个关键帧的properties→actions写入
  Set Variable: ″i″ = 1
  注:给i赋值1。
  Loop While (i<=8)
  注:从i=1开始循环到i=8。
  Set Variable:″/trail″&i&″:vx″=(eval(″/trail″&i&″:vx″)+(eval(″/trail″&(i-1)&″:x_value″)+k-eval(″/trail″&i&″:x_value″))*1/a)/b
  注:把本循环i的跟随部件和此部件前面部件的x坐标差赋予traili:vx。注意,由于前面还加了一个eval(″/trail″&i&″:vx″),所以才使得跟踪有弹性,中间加的k也就是前面规定的字母之间的距离。
  Set Variable: ″/trail″&i&″:vy″ = (eval(″/trail″&i&″:vy″)+(eval(″/trail″&(i-1)&″:y_value″)-eval(″/trail″&i&″:y_value″))*1/a)/b
  注:同上,对y坐标。由于字母是同一行所以y坐标相同,不用加k。
  Set Variable: ″/trail″&i&″:x_value″ = eval(″/trail″&i&″:x_value″)+eval(″/trail″&i&″:vx″)
  注:确定traili的x坐标位置,由目前位置加上前面已赋值的x坐标差。
  Set Variable: ″/trail″&i&″:y_value″ = eval(″/trail″&i&″:y_value″)+eval(″/trail″&i&″:vy″)
  注:同上,对于y坐标。
  Set Variable: ″i″ = i+1
  注:进行i自加1。
  End Loop
  注:循环结束后每个traili都有了新的位置。
  Set Variable: ″/trail0:x_value″ = GetProperty (″/trail0″, _x )
  注:获得目前trail0(字串的龙头)的x坐标。
  Set Variable: ″/trail0:y_value″ = GetProperty (″/trail0″, _y )
  注:获得目前trail0的y坐标。
  Set Variable: ″i″ = 7
  Loop While (i>=1)
  Set Property (″/trail″&i, X Position) = eval(″/trail″&i&″:x_value″)
  Set Property (″/trail″&i, Y Position) = eval(″/trail″&i&″:y_value″)
  Set Variable: ″i″ = i-1
  End Loop
  注:本循环把traili放到屏幕的新位置。
  最后在第三帧的properties→actions里写入
  Go to and Play (2)
  注:不断回到第二帧,不断获得新的位置,产生跟随效果。
  好啦,终于写完烦人的Script啦。将作好的actionMC放到场景里就可以了。预览效果如^15040201c^3。