无标题文档

轻松学习action
闪吧工作室（小刀主笔）

    国外的Flash动画相当精彩，有些非我等闪客们所能想象出来，在浩渺的网络我们发现了一些相当漂亮而且极具代表性的动画，下面的几节中我将就这些动画的制作一一进行介绍，希望给初鸟们有所启发，同时也抛砖引玉，敬请老鸟们多加批评指正（本站空间有限，所以西瓜与鸡蛋扔到我信箱里，呵呵！）。

                                      第一节　　电影夹子（ＭＣ）的制作

    本课就如何利用简单的SHAPE变化来实现动画的形状变化，并将之转换为一个影片夹子（即我们经常见到的MOVIECLIP，简称MC）。
首先，让我们看一下下面这个动画：

源文件下载（36kb）

１、　该动画相当简单，可以说是最基本的ＳＨＡＰＥ变化。没有什么技巧，也是一个初级爱好者首先要学会的。
              图一

２、好，闲话少说，言归正传，打开ＦＬＡＳＨ５，点选modify菜单，选中movie...选项（或按ctrl+m)，将场景大小设置为width为１５０，height为１３０。背影颜色为白色，其它尊重flash老大的默认设置，不用改变。
具体设置如图一所示。

              图二
    ３、接下来，按Ｒ键，选中矩形画图工具，在工作区内画一稍比工作区小一点的矩形框，用油漆桶工具（Ｋ键）将之填上黄绿色（颜色具体设置是在面板上将ＲＧＢ颜色设为：２０４，２５０，０）。
    做完上述工作后，按ctrl+F8，添加一个新组件，将这个组件的属性设置为movie clip，即影片夹子(MC)。如图二

              图三
    ４、利用铅笔工具画出如图三所示的一个几何图形（或用圆形工具画出一个圆以后再利用鼠标来调整也可以）。注意用铅笔工具画的时候一定要使这个图形是闭合的，即首尾线头务必相接合，这样才有利于下面填色。当进行完这项操作时，时间线上的第一帧会自动出现一个小黑点，如图三，这表示第一帧已经是一个关键帧。
    ５、选中油漆桶工具，将色彩面板的ＲＧＢ值设置如下：
（０，２０４，０），对几何图形进行填色。

              图四
    ６、在第二十帧插入一个关键帧（鼠标点第２０帧以后按Ｆ６键），这样便在第二十帧处出现了一个和第一帧一模一样的图形，当然，这并不是我们所需要的。我们要的是通过鼠标来调整该图案的边缘线来达到调整它的形状的目的。（当然，大家调整的时候不一定要和我们的图形一模一样，只要有变化就行了），需要注意的是：在调整的过程中不要让线条出现尖锐性的变化，比如底下的线条拉到上面，或上面的线条拉到下面，这样就会导致乱形，只要有稍微的变化就行，这种稍微的变化就如你谈情说爱一样温柔，不可过激哟，不然，嘿嘿！可别怪小刀没提醒你。
    ７、拉出如图的形状后，鼠标点第一帧与第２０帧之间的任一帧，点右键，选取菜单最下面的panels选项，在出现的右边子菜单中选取框架选项，这时会出现一个框架的浮动面板，在该面板中点击　tweening右边小三角箭头，会出现none、motion、shape三个下拉选项，自然选取第三
    ８、接下来便依照第６至７步的步骤分别在第４０帧与第６０帧处建立如图五、图六一样的shape变化（我想这二步不用我再讲了吧！不懂的话多试试，总得自力更生吧，呵呵！）。

                图五

               图六

                图七

    ９、嗯！我们做到这里已经将工作完成了百分之９５.６７８左右，按回车键，看一下变形的效果，满意的话那咱们进入下一步了罗！如果不满意的话，再自个儿仔细修改修改。我也累也，等你一下！
    １０、满意了吧！好耶，那咱们就点击本窗口左上角的scene1字样，对了，就是时间线左上面那位仁兄。回到主场景，按 ctrl+L键（或选点主菜单窗户下面的库选项，调出图库，你刚才做的那个影片夹子( MC ) [image] ，它可以调节该影片的大小，平时它是灰色的，当你选中某个元件时，它就变成黑色的了，还等什么？快调呀！别看我嘛，我总得喘口气呀，而且我长得不算太靓仔）。　如图七

    好，进行到这里，一切工作就绪，当然还欠东风。
    什么东风？当然是......调试了，具体地说就是ctrl+enter键。
    哈哈！还行不？不行？（脚下一滑，两眼一黑，扑通！）
    以上介绍的是最基本的形状变化，接下来我们要讲的是关于行动方面的动画，当然，不是我做的，不过我很佩服鬼子们的功底，学如逆水行舟，不进则退呀！学习学习，拿来拿来，是老祖宗们的教导，不敢忘！不然哪赶得上人家ＵＦＯ（打错，应是ＵＳＡ）呀！古墓这家伙真狡猾， 说只给我几个课程来写，谁知原来写一个课程需要这么大的精力的，早知如此，我就。。。。。。了！唉！唉！！！！！！！！！！！！！！

第一节 第二节 第三节 第四节 第五节 第六节 第七节 第八节 第九节


无标题文档

轻松学习action

第二节 小球环绕的立体效果

      咱们先不说别的，话不讲散了，看动画先：

    看到了吗？大家想想其是怎么实现的！
    其实这个动画的组件相当简单：一个球，一个空白的ＭＣ，一个按钮。但不简单的是实现这个复杂的动画所编写出来的action脚本。
    下面一步一步来：
              图一
    １、新建一个文件，点选菜单modify，将movie的属性设置为：frame rote为４０帧，width为３００，height为７０，backgroud为蓝色，点确定。

    ２、按ctrl+F8新建一个ＭＣ，取名为ball，在该ＭＣ中用画圆工具画一个圆（画的同时按住ＳＨＩＦＴ键）。去掉该圆的边线，再用油漆桶对该圆进行圆形渐变色填充，渐变色内为白色，外为淡蓝色（ＲＧＢ值分别为：０，１５３，２５５）。填充完，选取油漆桶附加工具：
transform fill [image] ，调整渐变色的形状如图一所示。
    ３、选中该圆形，在info面板中将其Ｗ与Ｈ值各定为１０。
    ４、再按ＣＴＲＬ＋Ｆ８键，增加一个新的ＭＣ，将其名定为ctrol，按确定，好，现在回到主场景（有的朋友问，为什么不在该ＭＣ中做一二个东东？难道什么也没有的也可以做为ＭＣ？不错，这个ＭＣ中我们就是什么都不做，只是用来控制动画的播放而已，欲具体情节如何，且听下回分解。）。

              图二

    ５、按ＣＴＲＬ＋Ｆ８键，增加一个按钮，定名为button，如第四的道理一样，我们只在hit帧处画出一个Ｗ＝１２，Ｈ＝１２的小矩形，姑且填上淡蓝色。其他帧不用去理会，有经验的ＦＬＡＳＨ爱好者知道，这个按钮也一定是用来控制用了，不错，的确是用来控制，至于为什么不在其他帧做元件，是因为不想有碍到后面的设计。如图二

              图三
    ６、按ＣＴＲＬ＋Ｆ８键，增加一个影片夹子，定名为“开关MC”，用矩形工具画出一个正方形（按住SHIFT键），并用直线工具连接该矩形的对角，组成一个 [image] 形状，设置Ｗ值（即宽度）与Ｈ值（高度）为１２，在时间线第10帧插入一个关键帧，去掉矩形中间的交叉，用直线工具画出一个十字形，如： ，然后用鼠标点击第20帧处，按F5键，插入时间帧。
    ７、新增加一个层，按ＣＴＲＬ＋Ｌ调出图库，将ＢＯＴＴＯＮ按钮拖到该层中来，调整位置与第一层的矩形相吻合。注意：因为我们上面做的ＢＵＴＴＯＮ里面是没有东东的，所以它在这里显示为淡蓝色，这是正常的。将本层帧数拉到第２０帧处。
    ８、新增加第三层，在第一帧上编写一个stop的action脚本，然后在第十帧上插入关键帧，同样写上stop。将帧数拉到２０帧处。
    ９、新增加第四层，在第２０帧上按Ｆ５键，插入一段影格，然后点击第一帧，在浮动面板的Frame的Label栏中填入offstate字样，再点第十帧，同样在浮动面板的Frame的Label栏中填入onstate。这样在第一帧与第十帧会各出现一个小红旗，这个意思是第一帧与第十帧分别被标识为offstate、onstate，指你生是我的人，死是我的鬼了，呵呵。完成这些工作后，具体图形如图三。
    到这里，我们已经完成全部的组件制作，准备进入关键的action编写。在按钮上点右键，在弹出的菜单上选中action选项，会出现action的编写窗口，添加如下代码：
      on (release) {
          _root.turnedOff = !(_root.turnedOff);
        if (_root.turnedOff) {
          gotoAndStop("offState");
        } else {
          gotoAndStop("onState");
        }
      }
    本段代码比较好理解：当鼠标从按钮上松开时，设置主场景中的turnedoff的值为非turnedoff值，即如果本来它的值为假的话，现在为真，反之为假。接下来判断如果turnedoff的值为真的话就跳到本mc的“offstate”帧，否则跳到“onstate”帧。至于turnedoff呢，它是一个放置在主场景中的变量，等下我们就可以提到它了。

              图四

     １０、点击scene，回到主场景中，双击时间线的第一层名“layer1"，再将之更名为action，在第一帧中加入：
turnedoff=false;
我们将上面提到的turnedoff变量赋值为false;即布尔值假。
１１、新增一个层，取名为：objects，将我们图库中做出来的“开关mc”，拖放到场景的最右下方，再将步骤４做出来的“ctrol”拖放到最左上方，由于mc中没有任何组件，它会显示为一个圆形小白点，如图四。
１２、鼠标右键单击图库中的ball影片夹子，在弹出的菜单中选中“Linkage...”，在接下来弹出的又一菜单中填入“expBall”，并选中“Export
        this symbol”选项，如图五，完成后按ok。
图　五
１３、最主要的制作工作已经完成，接下来，是编制action代码，虽然代码比较长，但并不是很晦涩难懂(呵呵，我这是打肿脸充胖子）。
右键点击场景中的“ctrol”MC,即那个小白点。在弹出的菜单中选取我们即爱且恨的“action”，添加代码如下：

onClipEvent (load) {　　　　　　影片夹子装入后触发事件
perspective = 300;　　　　　　　以下九行都是对变量进行初始化赋值
anglespeed = Math.PI/72;
tilt = 3;
radius = 36;
nBalls = 12;　　　　　　　　　　每个圈有１２个小球
startx1 = 45;
startx2 = 145;
startx3 = 245;
starty = 30;
for (i=1; i<=nBalls*3; i++) {　　这是一个递加循环，并导致后面会提取３６个小球
this.attachMovie("expBall", "mcBall"+i, i);　在本ＭＣ中提取图库中的expBall元件，并重命名
this["mcBall"+i].angle = i*Math.PI*2/nBalls;　对球环绕的角度进行赋值。
}
}
onClipEvent (enterFrame) {　　影片夹子各帧play后触发后面的事件
if (!_root.turnedOff) {　　　对主场景中的turnedoff变量取非值
for (i=1; i<=nBalls; i++) {
mcrBall = this["mcBall"+i];　将提取出来并重命名后的expball元件赋给mcrball
mcrBall.angle += anglespeed;　对mcrball的角度加一个步长值
a = Math.sin(mcrBall.angle)*radius;　懂数学几何的朋友应该明白sin乘以半径的意思
b = Math.cos(mcrBall.angle)*radius;　　同上
scalar = perspective/(b+perspective);　　这其实是一个百分比
mcrBall._x = a*scalar+startx1;　　　确定mcrball的Ｘ坐标（动态的），这是动画形成的关键
mcrBall._y = b*scalar/tilt+starty;　　确定mcrball的Ｙ坐标
mcrBall._xscale = scalar*100;　　　　确定mcrball的Ｘ缩放值，这就是为什么我们看起来立体的关键
mcrBall._yscale = scalar*100;　　　确定mcrball的Ｙ缩放值
mcrBall._alpha = (120-b)/2;　　　　确定mcrball的alpha值
}
for (i=nBalls+1; i<=nBalls*2; i++) {
mcrBall = this["mcBall"+i];
mcrBall.angle += anglespeed;
a = Math.cos(mcrBall.angle)*radius;
b = Math.tan(mcrBall.angle)*radius;
scalar = perspective/(b+perspective);
mcrBall._x = a*scalar+startx2;
mcrBall._y = b*scalar/tilt+starty;
mcrBall._xscale = scalar*100;
mcrBall._yscale = scalar*100;
mcrBall._alpha = (120-b)/2;
}
for (i=nBalls*2+1; i<=nBalls*3; i++) {
mcrBall = this["mcBall"+i];
mcrBall.angle -= anglespeed;
a = Math.sin(mcrBall.angle)*radius;
b = Math.cos(mcrBall.angle)*radius;
scalar = perspective/(b+perspective);
mcrBall._x = a*scalar+startx3;
mcrBall._y = b*scalar/tilt+starty;
mcrBall._xscale = scalar*100;
mcrBall._yscale = scalar*100;
mcrBall._alpha = (120-b)/2;
}
}
}

就上面的代码，我粗略地解释了一下（就是后面红色汉字部分，不要也输入到action中呀），同时为了与flash5的脚本相配合，我对格式与颜色都进行了调整，力争与原脚本保持一致。细心的朋友，会发现我只解释了一小段代码，后面的一段没有解释，这是因为，后面的基本上是前面的克隆，只不过是Ｙ值有些变化，因此我们看到的动画，有三个圈，每个圈１２个小球，而我们上面的这段代码中有三段for开头的循环，便是与这三个圈相对应的，每个循环基本上实现一个圈的动画。如果不信，大家可以自己试着屏蔽其中任意二个或一个，或者删掉其中的一个或二个for循环，看看有什么效果。至于第二个for循环为什么实现的动画是从上到下掉小球而不象其他二个那样只是围着圈转，这一点，大家有兴趣的可以研究一下，我提醒一下的是要注意其中不同的地方，如math.tan这个函数，具体我就不多说了，篇幅有限。而且，小刀不想让大家养成不惯思考的懒惰性格，这样不好，其实研究别人的动画代码有时候真是一件十分有趣而且绝对有益的好习惯，毕竟知识学到以后是自己的。
如果对部分函数不十分清楚，而又想了解的话，我建议大家勤于动手，可以自己更改其中的一些数值，如初始的数值，然后调试一下，看看与作者的原动画的什么区别，就知道你不明白的数值变化时会引起什么样的动画变动，此乃一决窍矣！
唉，说了这么些，我想吃一下冰淇淋了，口干呀！不对，好象打字是不用口来说的哟。那手打累了，好象应该按摩？谁来帮我？谁？
哎呀，满天的香蕉皮，开溜~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


无标题文档

轻松学习action

第三节：利用action来控制颜色的变化

    颜色的变化我们一般可以通过motion与shape的变化来实现，不过这种颜色变化较生硬，颜色与颜色之间的过渡人性化方面有所欠缺。我们定好两个帧之间的颜色以后变化就不受我们控制。而用action的color来控制的话可以进行细致的颜色控制，当然这需要我们有一定的色感（嘻嘻！不要误会哟）。多说无益，我们还是来进行下面实质性的工作。且先看看我们要的动画是如何的效果：

                       <<按住鼠标别放哦！ 源文件下载

    呵呵，有的朋友可能会奇怪，这不很简单的motion或shape效果吗？有必要说的那么玄乎？至于动画的如何做成，让我们先完成以下的最基本需要的动画元件。

    １、打开flash5，建立一个新文件，按modify菜单点远movie...对场景进行编辑，将之wideth与height值均设为100，背景选用白色，点确定。
    ２、点完菜单window--common libraries，调出flash５自带的图库。选中graphics，将图片mouse拖到场景中来，选中该老鼠，按ctrl+b进行多次的打散，（由于它是几层组件，所以要多按几次才可以将它打回原形），我们选中肚皮那块最大的淡蓝色填充块（如图一）。再按Ｆ８将它转换为影片夹子，并定名为：mcskin。其他几块不要动它，暂时让它安静地躺在这里，以观后效。
                      图一

    ３、按ctrl+F8建立一个新的按钮（button)，定名为“invisiblebutton”，在该按钮时间线的“hit”上插入关键帧，用矩形工具画出一个正方形，填充为蓝色。在info浮动面板上将之定性为Ｗ（宽）与Ｈ（高）都是12。其他帧均为空，所以我们这个按钮也是个空按钮。如图二：

                      图二

    ４、再按ctrl+F8建立一个新的影片夹子（movieclip)，定名为“onoffbuttonmc”。在该mc中用矩形工具画一个不带填充色的正方形，在info浮动面板中将其大小Ｗ与Ｈ都定为1２，在第十帧处插入一关键帧。点第一帧，用直线工具将矩形的对角线连接起来，图形如 [image] ，点第十帧，在矩形中画出一个比矩形稍小的十字形，图形如 [image] 。这第一帧与第十帧的形状貌似二个开关，其实就是用来做开关的，呵呵。
    ５、点左边的 [image] 按钮，插入一个新的图层“layer2”，用ctrl+L调出图库，将图库中的“invisiblebutton”拖出来，这时候第一帧会变成一个小黑点，表示该帧已有东东了。用鼠标调整该按钮的位置让其与“layer1”中的矩形相重合(最好打开磁铁工具snap to objects)。调整完以后，鼠标右键点击该按钮，在弹出的右键菜单中选中action选项，加入以下代码：
                  on (release) {
                      _root.lPlaying = !(_root.lPlaying);
                      if (_root.lPlaying) {
                        gotoAndStop("onState");
                      } else {
                        gotoAndStop("offState");
                      }
                    }
该代码根据主场景中的lplaying这一变量的最终逻辑值跳转到本mc的第onstate或offstate帧（下面就会提到），有一点数学与编程基础的都可以理解。
    ６、再插入一个新的图层："layer3"，点第一帧，在浮动面板的"frame"中填入“onstate”，这样我们将该帧标识为了onstate的名字（还有一面小红旗看哟），再点第十帧，按F6插入一关键帧，用与第一帧相同的方法将之标识为"offstate"的名字。
    ７、再插入一个新的图层"layer4"，在该图层的第一帧中填入“stop”的action代码，然后在第十帧处插入一关键帧，同样填入“stop”的action代码。然后将第１至４层的帧都延长到第２０帧处，如果以上第４至７步的工作完成就绪的话，该mc的具体图形就如图三所示：

                      图三
    ８、回到主场景，调整影片夹子"mcskin"的大小，将其与后面老鼠空出来的部分完全重合，从面拼合成一个完整的老鼠图案，并在　instance浮动面板中将其定名为“mouseskin”。插入一个新层，将图库中的“onoffbuttonmc”拖放到场景舞台的右下角，到这里我们最基本的定型已经完成，以上的工作就相当于硬件建设已经到位，以下就的步骤就是软件建设了。
    ９、选中第一层“layer1”，用鼠标右键单击影片夹子“mcskin”，在弹出的菜单中选action，加入如下代码：
onClipEvent (load) {
colorSkin = new Color(this);　　　　　　　　　　　／／定义colorskin为本mc的新颜色变量
var RedStart = 187;　　　　　　　　　　　　　　　／／　定义局部变量redstart起始值
var GreenStart = 196;
var BlueStart = 255;
var RedRange = 187;　　　　　　　　　　　　　　　／／定义局部变量redrange的颜色范围
var GreenRange = 193;
var BlueRange = 119;
var i = 0;　　　　　　　　　　　　　　　　　　判断条件
var lDir = 0;　　　　　　　　　　　　　　　　 ldir为０颜色变深，为１则颜色变浅
_root.lPlaying = 1;　　　　　　　　　　　　　 开关变量，以逻辑值表达。
}
onClipEvent (enterFrame) {
if (_root.lPlaying) {　　　　　　　　　　　　 获取onoffbuttonmc中提供的lplaying值后进行判断。
RedSkin = RedStart-(i*.01)*RedRange;　　　　　对r色值进行计算。
GreenSkin = GreenStart-(i*.01)*GreenRange;　　对g色值进行计算。
BlueSkin = BlueStart-(i*.01)*BlueRange;　　　 对b色值进行计算
i = (lDir == 0 ? i+1 : i-1);　　　　　　　　　i值的递加与递减由ldir值是否为０来选择
if (i>99 || i<1) {　　　　　　　　　　　　　　判断i值是否超出１与９９的范围
lDir = !lDir;　　　　　　　　　　　　　　　　 如果i值超出范围，赋予非值
i = (lDir == 0 ? 0 : 99);　　　　　　　　　　 根据ldir的值选择i的值，实现转换
}
colorSkin.setRGB(RedSkin << 16 | GreenSkin << 8 | BlueSkin);　嘻！自己思考
}
}

    １０、按ctrl+enter，怎么样？是不是有点起色了？颜色变化的稳定性虽然在这里看不出有比motion和shape优越的地方，但由于rgb值可以由自己精细控制，所以人性化就大多了，而且这个程序还没有在颜色上大做文章，所以不会让学习者有明显的感觉。其实我们这章节着重要掌握的要点是：
                （１）new color()；
                （２）mycolor.setRGB()；
                （３）逻辑代数的基本运算
    １１、就到这里吧！同学们，放牛啦！


无标题文档

轻松学习action

第四节：显示时钟与日历

    本节比较简单，就如何在flash中显示系统时间与日历来讲解一下，并就这些系统时间的可能有的效果来做一下简单地介绍，至于如何做出一些效果嘛，哈哈，当然是看各位兄台的了，如今不是焚书坑儒的时代，有多少创意你就做多少创意，还望创意出来以后多来我们这里来展示风采，闪吧的虾哥们夹道欢迎！（鼓掌，啪啪啪啪啪啪！），请兄台们看看以下文件先：

原文件下载

               图一
    １、打开flash，点菜单modify--movie...，将宽与高设为２００，将背景色设为淡蓝色，点ok。

    ２、用文字工具写出“www.flash8.net”字样，字号设为２０，文字颜色设为蓝白色，字体设为times new roman。拖到舞台上，用缩放工具 [image] 调整到合适大小，再将其复制三个同样大小的字样，这样我们一共有四个，用旋转工具旋转后，分别围绕舞台屏幕四周排放，如图一。

    ３、用矩形工具在四排字围成的空间内再画一个草绿色的正方形，边线颜色：左边与上面为白色，右边与下面为黑色，这样看起来立体感就出来了。

               图二

    ４、选中文字工具，在面板上面定义字号为１８号，字色为黄色，默认字体，然后在TEXT OPTION浮动面板选项中选取Dynamic Text选项，在绿色正方形上方画出稍比绿色正方形窄一点点的文本框。然后在
Text Option选项的"variable"栏中填入“sday”，这样就对刚才的文本框进行了命名。如图二

               图三

    ５、用同样的方法在绿色正方形下方画出三个同宽均分的文本框，从左到右分别命名“nhours”、“nminutes”、“nseconds”，用对齐工具的 [image] 与 [image] 对这三个文本框进行对齐，完了以后再用文字工具分别在三个文本框中间加入一个“：”号，作为时、分、秒的间隔。如图三所示。

    onClipEvent (load) {
dateNow = new Date();
aDays = new Array('Sunday', 'Monday', 'Tuesday', 　　　　　　　'Wednesday',
        'Thursday', 'Friday', 'Saturday');
}
onClipEvent (enterFrame) {
_root.sDay = aDays[dateNow.getDay()];
_root.nHours = dateNow.getHours();
if (_root.nHours<10) {
_root.nHours = "0"+_root.nHours;
}
_root.nMinutes = dateNow.getMinutes();
if (_root.nMinutes<10) {
_root.nMinutes = "0"+_root.nMinutes;
}
_root.nSeconds = dateNow.getSeconds();
if (_root.nSeconds<10) {
_root.nSeconds = "0"+_root.nSeconds;
}
delete dateNow;
dateNow = new Date();
}

    ６、按ctrl+F8新增加一个ＭＣ，命名为“control”，点确定。再回到主场景中，按ctrl+L调出图库，将ＭＣ“control”拖到场景中来，不一定要放到舞台上，放到舞台外吧。在它上面点右键，选中action选项，添加左边的代码。

    ７、本节代码中需要掌握的是：
      new date();
      new array();
      getday() ;
      gethour();
      getminutes();
      getseconds();
      delete;
    由于这段代码相当容易理解，我在后面就没有加上说明（声明：这绝不是我懒哟！），见谅。朋友们有想深究的可以自己认真分析一下。
还有什么疑问发言发到flash８论坛上去，或者发到我的信箱里面。

题外话：
    获取时间与日历，可以用来制作日历，钟表，还可以制作定时炸弹，时间表盘等效果，这需要看你自己的创意了，我们还可以利用秒的规律变化进行其他控制，如：指针、loading条、触发条件等等，在flash制作的游戏中也有一定用处，不信，自己试试看。


Untitled Document

轻松学习action

第五节：层出不穷的蝴蝶

      随机产生若干个蝴蝶，让它们从屏幕的下方飞出，到上方消失。除了蝴蝶的飞舞是用ＭＣ来做成以外，其他的动作是利用action控制蝴蝶的Ｘ坐标与Ｙ坐标实现。让俺们来看看动画效果，再想想其实现的原理，准备就绪后，就开始进入制作了罗：

图一

    １、打开flash５，点选菜单modify---movie...，将影片舞台大小设置为宽（width）与高（height）都为１００。背景色选择深蓝色。点确定。

    ２、按ctrl+F8键，增加新的元件，我们取名hudie，选中movie clip选项，这样新的元件就定性为影片夹子（有的书本上称影片剪辑或影片段，均大同小异）。点确定。 　　３、用铅笔工具和圆形工具，画出蝴蝶的身体、头部及触须。这很简单就办到，触须用铅笔，画出二条与身体长度差不多的倒八字线条，线条粗细选中１；头部用圆形工具（边线宽也为１）画出，稍小；身体也用铅笔勾勒成一个扁豆角的闭合形状。头部与身体的用油漆桶填上淡蓝色，色值在mixer浮动面板中设置，其值如下：（R=102、G=153、B=255），具体如图一。

图二

    ４、画完后的蝴蝶身体部分如图二所示，不一定要完全一样，反正大家画得差不多象个蝴蝶就行了，但别画成螳螂，要不到后面一加上翅膀，便成了满天飞的蝗虫，呵呵，那我可就晕了，几个美眉人工呼吸也难醒啊！

    ５、做到这里，我们才刚刚做完本ＭＣ的第一层的躯干而已，那下面就轮到翅膀了，别急，翅膀是不能在这一图层中做的，我们需要另外增加一个图层，按 [image] ，加入"layer2"层。

图三
    ６、在“layer2”中画出一个翅膀形状，如图三，填充上淡蓝色的颜色（ＲＧＢ值为102、204、255），在info面板中将大小设置为w:36,h:26。

    ７、在第三帧上插入关键帧，在该帧用缩放工具将翅膀图形缩小，其大小设置为：w:30，h:24。

    ８、在第五帧上插入关键帧，同样在该帧用缩放工具 [image] 将翅膀图形缩小，或在info面板里面将其大小设置为：w:15，h:22。

    ９、分别在第一帧与第三帧上加入shape的tweening变化。这样翅膀的动画似乎完成了，但好象有点不太协调，的确，这是因为有二方面的原因，一方面是翅膀变化的时候中心线有点没有对齐，这要根据你自己的感觉来调整翅膀的位置，最好是翅膀的中心线在一起。另一方面翅膀的扇动不连续，是的，下面我们解决这个问题。

图四

    １０、右键单击第三帧，在弹出的菜单中选“copy frames”（中文名“复制影格”），再右击第七帧，在弹出的菜单中选“paste frames”（中文“粘贴影格”），如此这般，我们在第七帧加入了和第三帧中一模一样的翅膀，根据同样的办法将第一帧的影格复制到第九帧，然后分别在第五帧与第七帧上加入shape的tweening变化。敲敲回车看，是不是平滑了许多，顺眼了许多？

    １１、将layer2层施放到layer1层的下面，调整蝴蝶的躯干大小和位置，让其覆盖在翅膀上面，将layer1层的影格延长到第九帧，这样一只会飞的蝴蝶便告诞生。

    １２、回到主场景，按ctrl+F8建立一个新的按钮（button)，定名为“invisiblebutton”，在该按钮时间线的“hit”上插入关键帧，用矩形工具画出一个正方形，填充为蓝色。在info浮动面板上将之定性为Ｗ（宽）与Ｈ（高）都是12。其他帧均为空，所以我们这个按钮也是个空按钮。如图四：

    １３、再按ctrl+F8建立一个新的影片夹子（movieclip)，定名为“onoffbuttonmc”。在该mc中用矩形工具画一个不带填充色的正方形，在info浮动面板中将其大小Ｗ与Ｈ都定为１２，在第十帧处插入一关键帧。点第一帧，用直线工具将矩形的对角线连接起来，图形如 [image] ，点第十帧，在矩形中画出一个比矩形稍小的十字形，图形如 [image] 。
    １４、点左边的 [image] ，插入一个新的图层“layer2”，用ctrl+L调出图库，将图库中的“invisiblebutton”拖出来，这时候第一帧会变成一个小黑点，表示该帧已有东东了。用鼠标调整该按钮的位置让其与“layer1”中的矩形相重合(最好打开磁铁工具snap to objects)。调整完以后，鼠标右键点击该按钮，在弹出的右键菜单中选中action选项，加入以下代码：
                            on (release) {
                                  _root.lPlaying = !(_root.lPlaying);
                                  gotoAndStop (_root.lPlaying ? "onState" : "offState");
                            }
    １５、再插入一个新的图层："layer3"，点第一帧，在浮动面板�"frame"中填入“onstate”，这样我们将该帧标识为了onstate的名字，再点第十帧，按F6插入一关键帧，用与第一帧相同的方法将之标识为"offstate"的名字。
    １６、再插入一个新的图层"layer4"，在该图层的第一帧中填入“stop”的action代码，然后在第十帧处插入一关键帧，同样填入“stop”的action代码。然后将第１至４层的帧都延长到第２０帧处，如果以上第１３至１６步的工作完成就绪的话，该mc的具体图形就如图五所示：

图五
１７、回到主场景，按ctrl+F8，新一个影片夹子，定名为control，确定。在该影片夹子里面什么也不用做，让它保持一个空白的原始记录。再次回到主场景，按ctrl+L键调出图库，将按钮"onoffbuttonmc"影片夹子拖放到舞台的最右下方。将ＭＣ“hudie”、“control”拖放到任意地方，选中并给hudie命名－－在"instance"浮动面板的name栏中填入"nhudie"。如图六：

图六
１８、一切就绪以后，我们在图六的control影片夹子上点右键，点中action选项，添加以下action代码：
              onClipEvent (load) {
                    cnIntervalMax = 20;
                    cnYPos = 110;
                    nIntervalCount = cnIntervalMax+1;
                    nItemCount = 1;
                    _root.lPlaying = 1;
              }
              onClipEvent (enterFrame) {
                    if (_root.lPlaying) {
                      if (nIntervalCount>cnIntervalMax) {
                        duplicateMovieClip (_root.nhudie, "nhudie"+nItemCount, nItemCount);
                        _parent["nhudie"+nItemCount]._x = Math.random()*70;
                        nhudieSize = 15+Math.random()*40;
                        _parent["nhudie"+nItemCount]._xscale = nhudieSize;
                        _parent["nhudie"+nItemCount]._yscale = nhudieSize;
                        _parent["nhudie"+nItemCount]._y = cnYPos;
                        nItemCount++;
                        nIntervalCount = Math.random()*10;
                      }
                      nIntervalCount++;
                  for (i=1; i<=nItemCount; i++) {
                    if (_parent["nhudie"+i]._y<-20) {
                      _parent["nhudie"+i].removeMovieClip();
                    } else {
                    _parent["nhudie"+i]._y -= 1;
                      }
                    }
                  }
              }


Untitled Document

轻松学习

action 第六节：向心的线条

    大家好，这次我们来看看画出的线条是怎么向心的，这个“心”嘛就是指鼠标，当你在屏幕的任何地方点击一下，各线条马上向你看齐，可以媲美国旗班的那帮靓仔帅哥了。呵呵，不信呀？自己点点看！怎么样？我没骗你吧！如果有兴趣的话，那咱们开始进入制作程序了，如果没有兴趣的，转下一章节，正所谓来去自由，逍遥快活，网络就是这样对不？要不那上网还有什么意思？（完了，离题了）

原文件下载

    １、打开ＦＬＡＳＨ５，点选modify---movie选项，将影片大小设置为宽（width）300，高（height）100，背景（background)设置为深蓝色。一切无误后点确定。

    ２、按ctrl+F8键新增加一个ＭＣ（movieclip），定名为baseline，按确定，进行line的编辑场景，我们用直线工具 [image] （或直接按n键）在场景中画一45度角的斜直线（画线的同时按住shift键），在info浮动面板中将这个斜线的属性定为：Ｗ－１００；Ｙ－１００；Ｘ－０；Ｙ－０。如图一所示。

图一

    ３、按ctrl+F8建立一个新的按钮（button)，定名为“invisiblebutton”，在该按钮时间线的“hit”上插入关键帧，用矩形工具画出一个正方形，填充为蓝色。在info浮动面板上将之定性为Ｗ（宽）与Ｈ（高）都是12。其他帧均为空，所以我们这个按钮也是个空按钮。如图二：

图二

    ４、回到主场景，按ctrl+L键调出图库，看到躺在里面的那个"Line"影片夹子了吗？在该夹子上点右键（是字符上而不是浏览窗口中），以弹出的菜单中选好“Linkage...”（如图三），然后又会弹出一个窗口。在对话框中填入“baseline”的名字，并选中“Export this symbol”选项，按ＯＫ（如图四）。
图三

图四

    ５、将按钮“invisiblebutton”拖放到舞台上来，将其大小设置为宽３００，高１００，这样刚好与我们的场景大小一致，调整其让它完全覆盖场景。完好了以后，在该按钮上点键，以弹出的菜单中选action，添加如下代码：

on (press) {
for (i=(iDepth-nLines); i<iDepth; i++) {
            移除主场景中所有的线条
_root["Line"+i].removeMovieClip();
}
for (i=0; i<nlines; i++) {
xMid = _root._xmouse; 　　获取鼠标Ｘ坐标
yMid = _root._ymouse; 　　获取鼠标Ｙ坐标
drawLine(xStart[i], yStart[i], xMid, yMid);
            调用第一层第一帧中所定义drawline函数
idepth++;
}
}

６、按 [image] 新增一层“layer2”，在该层第一帧中写下如下action代码（需要在该帧中点右键或双击该帧才会出现action面板）：
function drawLine (xStart, yStart, xStop, yStop) {通过function来定义一个drawline的函数模块，其中内容可以批处理调用，好东东呀。
    attachMovie("baseLine", "Line"+iDepth, iDepth);ＭＣ“line”以xStart, yStart为起始坐标
      this["Line"+iDepth]._x = xStart;
      this["Line"+iDepth]._y = yStart;同上
      this["Line"+iDepth]._xscale = xStop-xStart;不用说了，这是指大小缩放值
      this["Line"+iDepth]._yscale = yStop-yStart;呵呵，同上
}
      iDepth = 0;步长变量
      nLines = 50;线条数
      xStart = new Array(nLines);新建一个数组数达到nlines长度的数组
      yStart = new Array(nLines);同上
      xMid = 150;
      yMid = 60;
    for (i=0; i<nlines; i++) {
      xStart[i] = Math.random()*300;获取一个与舞台等宽的随机数为xstart[i]数组其中一个元素赋值。
      yStart[i] = Math.random()*100;同上
      drawLine(xStart[i], yStart[i], xMid, yMid);将上面的提取的四元素值赋给drawline的四个变量后执行该函数。
      iDepth++;累加
    }

        ＯＫ，搞定了，一切就绪，要做的都做了，没做的也做了，就等大家来调试了，赶快ctrl+enter吧！我休息一下。


Untitled Document

轻松学习action

第七节：利用sin、cos函数实现画圆

    本节与tweening中的画圆位移不同，它是通过利用sin、cos函数的控制来实现画圆的，具体地说是状似雷达屏那种画圆运动。他与tweening的区别就在于文件小，是用action来实现的。如下图：

源文件下载

    １、打开flash，点菜单modify--movie...，将宽与高设为２００，将背景色设为淡蓝色，点ok。

    ２、用文字工具写出“www.flash8.net”字样，字号设为２０，文字颜色设为蓝白色，字体设为times new roman。拖到舞台上，用缩放工具 [image] 调整到合适大小，再将其复制三个同样大小的字样，这样我们一共有四个，用旋转工具旋转后，分别围绕舞台屏幕四周排放，如图一。 　　３、用矩形工具在四排字围成的空间内再画一个草绿色的正方形（宽与高约１３８），边线颜色：左边与上面为白色，右边与下面为黑色，这样看起来立体感就出来了（如图二）。

图 一
    ４、按ctrl+F8建一新影片夹子，命名为"radius"，按ＯＫ后，用直线工具画一宽为６９的亮绿色线段，坐标设置为（０，０），这样可以使它的最左边端点放在十字形中心位置。

     ５、按ctrl+F8建一新影片夹子，命名为"sincos" ，按OK后用直线工具画一条如第４步一样长度的线条，颜色设为蓝色，选中该线段后按住ctrl键，用鼠标拖动它，这样我们会复制出一模一样的一线段来，这下我们不把它设为蓝色了，我们把它设为黄色。在选中该黄线的前提下，按ctrl+alt+s，在弹出的对话框中的“rotate”中填入９０后按ＯＫ，这样把黄线旋转了９０度，调整其位置，使其最下端点与蓝色的最右端点相重合，这样二线组成了一个垂直的几何图形（如图三）。

图　二

图　三

     ６、按ctrl+F8建一新影片夹子，命名为“display”，按ＯＫ，用圆形工具画一空心圆（画圆的时候按住shift键），在info浮动面板中设置其大小，宽与高均为１３８，坐标设置为（－６９，－６９）。然后设置线段颜色为深绿色，填充色为亮绿色。 　　７、新建一个层“layer2”，按ctrl+L，调出图库，将ＭＣ"radius"拖到该层中，调整其位置，坐标设置为（０，０），同时在浮动面板instance中将之定名为"nradius"(记住，这一步很重要）。

    ８、新建一个层"layer3",从图库中把ＭＣ"sincos"拖放到该层中，调整其坐标为（０，－６９），同样在instance面板中将之命名为"nsincos"。此时sincos会把radius覆盖，不过这不是什么问题，不管它。关键是以下的步骤。完成以上步骤以后得到的图如图四。
图　四

    ９、回到主场景，新建一个层，将图库中�"display"影片夹子拖放到舞台上来，仔细调整其位置，使其与矩形绿框差不多重合，必要时可以调整其大小，形成如图五一样的图形。

    １０、在"display"影片夹子上点右键，选中action选项，在action编辑框中填入以下代码：

图　五

onClipEvent (load) {
angle = 0; 　　　　　　　　　　　　　　　设置起始角度为０
}
onClipEvent (enterFrame) {
angle += Math.PI/180*2;　　　　　　　　　　　设置累加的角度步长值
nRadius._rotation = -angle/(Math.PI/180);　设置半径线radius的旋转角度(符号“－”是不可以掉的哟，@_@)
nSinCos._xscale = Math.cos(angle)*100;　　　设置sincos的X缩放值
nSinCos._yscale = Math.sin(angle)*100;　　　设置sincos的Y缩放值
}

解决说起上面的这段程序并不是很难：角度angle设置为０后，mc"display"每被循环一次，数据被重新刷新一次，刷新的速度为１２帧／秒，即是我们动画的总参数（在modify--movie...的选项中，通过调整frame
        rate的数值可以改变我们这个动画的速度），刷新一次，angle便以２（２这个数字可以改变其大小与正负值，大小关系到快慢，正负关系到旋转是顺时针还是逆时针，不信？呵呵，小刀何时骗过大家？自己试试）的步长值增长，于是半径线旋转，接着nsincos的x与y方面的缩放值也因为angle的变化而变化，那么便成了动画，其实这严格来说不叫动画，只是视觉误差而已，原因就是nsincos与半径线radius的属性有了变化。大家理解不？呵呵，不要紧，初学者慢慢地品尝，当理解原始动画的形成是一本书中画了许多形状不同但相差不太大的图像并快速翻动的时候形成的，你就可以理解了。
好，本节到这里结束，我得觉觉猪去了，深夜写教材不是个好事，呵呵。


Untitled Document

轻松学习action

第八节：滚动的文本框(一)

    屏幕上需要显示大量的文本而我们编辑并允许它显示的区域又有限时，我们是否相当头痛？嘿嘿，那么下面便是又一基础课程，很简单的，只要你有耐心有兴趣，花上十来分钟的时间就可以摆平这个当前的绊脚石．不信？ＬＥＴ＇Ｓ　ＧＯ．不过在ＧＯ之前大家先看看效果吧，不然回过头边大呼上当，边提着斧头赶得我满闪吧乱窜，骂我有诱骗之罪，那可就相当不妙了，阿弥陀佛！不过你在制作之前我们要求大家具备一些填色的基本知识。

      源文件下载

    1、打开FLASH5，选取MODIFY—MOVIE...选项，将舞台场景设置为200*200的的宽与高，淡蓝色背景，12帧的FRAME RATE，点OK。

     2、用文字工具写出“WWW。FLASH8。NET”字样，选择字号18，字体“TIMES NEW ROMAN”。然后将这些字打散，用淡蓝到深蓝的渐变色对其填充，并用调整其渐变色的方向为从下到上。（如图一）。

     3、选中所有文字，并按住CTRL键，拖动它使其复制出另外一文字，用旋转工具让其旋转180度，放置在舞台的最下方，与上方的这个遥遥相应。

图一

    4、用矩形工具画出一个正方形（不用填充色），大小约为W与H均为150。再在该矩形中画多一个比之稍小一些的正方形（一样不用填充色）。调整它的位置使它恰好处在被大正方形均匀包容的位置（嘻，也就是正中间哪！），用直线工具连接大小两正方形的四个角，连完后再用图一中所示的那种填充色对大小正方形之间的空隙进行填充，并用工具调整这四个空隙填充色的方向，使其淡蓝朝里，深蓝朝外，壮似立体框一样，调整完后删掉四个解的斜线与小正方形的四个边。

图二

    5、按CTRL+F8新建一个MC“BACK”，在该MC中画一个宽140高140的正方形，不加边线，只用纯蓝色加以填充，并设定其alpha值为20。接着分别在第5、10、15、20、25帧处分别插入关键帧，将10帧填充为红色、15帧填充为绿色、20帧填充为黄色，25帧不变，设置这些颜色的ALPHA值均为20。设置完了吗？好，我们再在第1至第20帧上分别加入SHAPE的变化，这样一个颜色渐变的MC完成（如图三）。

    6、回到主场景中，新建一层“LAYER2”，拖动该层使之位于“LAYER1”的下方，按CTRL+L键调出图库，把MC拖出来放在该层中，与正方形框架相重合，做一个背景用。
图三

    7、按CTRL+F8新建一个按钮“UP”，用画圆工具（不选边线），画一深灰色的圆，大小为32（W与H），影格拖至“DOWN”帧处。
    8、 新建一层“LAYER2”，画一大小为24的圆（W与H），边线色为黑色，线的属性在STROKE面板中设置为HAIRLINE（头发丝那么细，呵呵）。用图一的填充色对其进行圆渐变填充（不是线型渐变色罗）。再用调整其颜色形状如一个球形，具体调整过程如图四，拖动它到深灰色的圆的左上方，使深色圆看似阴影，以增加立体感。
    9、在DOWN帧插入关键帧，用纯黑色填该圆形。然后在HIT帧也插入一关键帧。
    10、新建一个层“LAYER3”，圆一个小形的椭圆，用100%的白色在内，0%的白色在外的圆形渐变色对该圆进行填充（如图五），用 [image] 对其进行变形，让其颜色形状与椭圆形状重合，看起来象个椭圆的白光球。接着拖动它使它位于第二层蓝球的上方，使其看似一个蓝色球的反光效果（如图六）。

图四

图五

图六
    11、新建一个层“LAER4”，用直线工具画出一个方向向上的三角形，使其略小于图六所示圆，拖放其至该圆上，填充上黑色，在OVER帧插入一关键帧，用白色填色该帧的三角形。到这里为止，我们便完成了所有关于此立体按钮的制作。
    12、回到主场景，按CTRL+L调出图库，在该按钮“UP”上点右键，复制一个一模一样的按钮，改名为“DOWN”，双击该按钮，进入编辑区域，选中第四层“LAYER4”中第一帧的三角形，按下CTRL+ALT+S，在"rotate"栏中填入180。将此三角形方向掉转了个，转为方向朝下，用同样方法将该层OVER帧的三角形也掉转方向。
    13、回到主场景，选中“layer2”，将图库中的“UP”按钮拖至正方形框的右上方，将“DOWN”按钮拖至正方形框的右下方。
    14、新建一层“LAYER3”，用文字工具在场景中拖出一个与正方形框内框一样大小的文字框（可稍小，但不可以大，大了就大煞风景了，@_@）。在“TEXT OPTIONS”浮动面板上选中“INPUT TEXT”、“MULTILINE”选项，在VARIABLE栏中填入TEXT名，以将该文本框定名为“TEXT”。
    15、就绪后一切如图六左图所示。然后在“UP”键与“DOWN”键上分别点右键，各加入以下代码：
图七
UP按钮：
     on (press) {
        text.scroll = text.scroll-1;
    }
DOWN按钮：
      on (press) {
          text.scroll = text.scroll＋1;
      }

    16、点第一帧在该帧点右键，选中action后添加一个文本赋值语句：
    TEXT=“......”；
    注：此语句中的省略号是你自己需要手工输入的一大篇文字信息，因为太长，而且各位想输内容不一样，所以小刀在此以省略号代过。


Untitled Document

轻松学习action

第九节：滚动的文本框(二)

     上一节，我们做了一个滚动的文本框，已经了解了基本的文本是怎么实现卷屏的效果的，但如果用久了，就会觉得有一点不爽了，为什么呢？象我这样一目十行的“大虾”（自诩也！），这么一行一行地慢慢敲，要敲到什么时候是个头啊！看一行点一下鼠标，看一行又点一下，如果性子急点的人还真顶它不顺。不过不要紧，咱们本节就针对“客户”（不给钱的客户，呵呵）的需求，来做一个点住不放的时候，它自己猛卷屏的效果，你不松它不停，你一松它也不停（错，是要停的）的效果。嘿嘿，还望大家有钱的捧个钱场，没钱的捧个人场！来来来，看看看，且看小刀怎实现（对了，还是看效果）：

源文件下载

    １、如果你没有看上一节的话，你最好先不要看这节了，前一节是基础嘛，英文字母“ＢＡＳＥ”，你的明白？
    ２、 打开上一节做的ＦＬＡ文件，选中“ＵＰ”按钮（即那个方向向上的按钮），按Ｆ８键，将之转为一个ＭＣ“scrollup”影片夹子　（不用担心，那个按钮ＵＰ不会消失，还乖乖地躺在图库里面，只是新增加了一个ＭＣ“scrollup”而已）。
    ３、用同样的方法将“ＤＯＷＮ”按钮也一样转换成为一个"scrolldown"影片夹子。
    ４、进行以上的转换后的图库中的元件应该如图一所示那个样。看到没有？“UP”按钮与“DOWN”按钮都安然无恙地躺在里面吧！却多出来二个MC，哥哥叫“SCROLLDOWN”，弟弟叫“SCROLLUP”，呵呵。
    ５、唉，别管他们的血缘关系了，我们关心的是它们的作用。没错了，就是作用。双击“SCROLLDOWN”，进入该MC的编辑区域，我们看到只有一个按钮躺在里面，对，就是DOWN按钮，在它上面点右键，选ACTION选项，加入如下代码：
  on (press) {　　　　　　　　当鼠标松开时
    ipress = true; 　　　　　ipress为一逻辑判断值“真”
  }
  on (release, releaseOutside) {　当鼠标松开或移到影片外面时
    ipress = false;　　　　　　设置ipress的逻辑值为“假”
  }
    这段代码不用我解释了吧？什么，要？算了，我加上了。
    ６、双击图库中的“SCROLLUP”，用步骤5一样的方法加入上述同样的代码，完全一样哟！

图一

    ７、回到主场景中，这里面在正方形框右边的二个上下按钮其实现在已经不是按钮了，而只是二个MC而已，不信？你选中它们以后，看看INFO浮动面板中是怎么显示的。

    ８、既然已经知道它们是ＭＣ了，就没有理由不编辑它了，因为编辑它上面的ACTION代码才是至关重要的。

    ９、鼠标右击上方的向上箭头MC“SCROLLUP”，选取ACTION，在编辑区逐行逐行输入以下代码（如图二）：

onClipEvent (enterFrame) {　//当影片夹子每个帧都运行后（一帧）
    if (ipress) {　　　　　　　 //如果ipress的值为“真”
    _root.text.scroll -= 1;　//主场景中的文本"TEXT"向上卷一行
    }
}

图二

    １０、同第９步，在ＭＣ“SCROLLDOWN”上添加以下代码：

onClipEvent (enterFrame) {　当影片夹子每个帧都运行后（一帧）
    if (ipress) {　　　　　　　 如果ipress的值为“真”
    _root.text.scroll += 1;　主场景中的文本"TEXT"向下卷一行
    }

    １１、细心的读者会发现上面二段代码的区别仅在于第三代码行的运算符一个是“+＝”，一个是“-＝”而已。这正是向上卷与向下卷的区别了。

    １２、本动画由于利用了ＭＣ的重复循环功能来实现不停的卷屏，并通过鼠标在按钮上的“press”或“RELEASE”“RELEASEOUTSIDE”等状态来控制是否向上卷或向下卷，代码看起来并不复杂，而且相当容易理解。精简呀！

    大家按ＣＴＲＬ＋ＥＮＴＥＲ看看有没有什么反应？哇！一切正常是不？
    正常就好，正常就好！安全第一，安全第一！