FLASH代码初级教程

FLASH代码初级教程 第一课: 这是我们第一次接触到的语句。学代码有以下几条注意事项: 第一条,你得把单词记住了,四个字母,一个也不能错。要是字母写错了,那就全完了,我也帮不了你了。 第二条:记住它的意思,这也非常重要。一个单词,究竟是什么意思呀?不知道怎么用,我也帮不了你了。 第三条:在写代码的时候,要注意大写小写,不能乱写。上面是标题,全部大写。但写到程序里面去时,不是这个样子的哦。 第四条:在使用的时候,标点符号也是有特定的要求的,也一点点不能错的?。 今天我们学的STOP是停止的意思。就像是马路上红灯亮了,紧急刹车。我们知道:在以前制作的小动画,当播放完了之后,会自动又从头放起,没完没了地一遍又一遍地放。最好是让它播完后就停下来,让用户来决定是不是要从头放起。那么,这个STOP就派上用处了。在你的小动画的最后一帧上,写这个命令: stop(); 现在我们看到了,除了stop这个单词之外,后面有一个小括号,最后是一个分号。这是必不可少的,你得记住了。不要光写一个stop,后面什么都不写哦。至于为什么要写小括号,为什么要写分号,这个留到下一课再讲吧。好了,这样,你的小动画就再也不会没完没了的了,放到最后一帧就会停下来了。你可以写上你的网名,让大家看清楚是谁创作的啦! 第二课:gotoAndPlay(跳到某一帧继续运行) 怎么样?有没有把你的小动画的最后一帧加上stop?是不是很听话地停下来了?体会到了代码的威力了吧。 好,我们来接着学习第二个语句: gotoAndPlay(); 在英语里,这是由四个单词构成的。第一个是go,是去的意思,to是方向and是和的意思,或说是并且。play是大家熟悉的了,播放。连起来的意思就是跳到某一帧去继续运行。括号里一定要填上一个数字。如果(10),就是跳到第十帧继续运行。注意它的大小写。这后面也有一个分号。可以说:代码的每一句的最后就是一个分号。 ?这个东西有什么用呢?这好像是一个交通警,可以指挥FLASH的运行。就像唱歌,有时,唱完一支歌之后,并不是再从头唱的,而是再唱一遍副歌。假定一首歌有一百帧。当唱到一百帧的时候,写上一句: gotoAndPlay(80); 这就是重新回到第八十帧来唱,而不要回到歌曲的头一句来唱。这就起到了指挥的作用。?这个容易理解吧。 那么,得寸进尺,我们再来学一个相近的命令: gotoAndStop(); 大家一定猜得出来,这个命令是跳到某一帧去停止,听候别的命令。真聪明。我再打个比方:

如赛跑,跑到终点或是某一点的时候,教练告诉运动员,你赶快到田径场等待别的比赛。是停在田径场。这个命令有两个用处:一个是用于结束。停在某一个帧上就结束了,可能这一帧是最漂亮的吧?另一个用处是跳到某一个帧停在那儿,听候其它的命令。例如:?一个小动画的第五十帧上写有 gotoAndStop(20); 这意思就是说,运行到了五十帧后,不要再运行五十一帧了,回到第二十帧停在那儿。可能是听候别的命令,也可能是让别的人出场表演了。 好了,这一课学了两个命令了,有没有搞混呀?顺便补充一句:第一课中的stop();括号里是不用写数字的,而这一课的括号里必须写上数字,一定要回答这个问题:跳到第几帧呀?如果你不告诉,这个语句就是错的,无法执行!你这个指挥官没当好。 第三课:按钮上的控制代码 前两课,我们已经学了三个语句了。记住了吗?会用了吗?stop比较简单,gotoAndPlay与gotoAndStop稍稍有点儿难。就是那个小括号里面要加上数字。以后我们还会讲到,小括号里不仅仅是写入数字那么简单,还会写上别的东西,还会更复杂一些。现在为了便于记忆,先不说这些了。 这一课,我们要讲按钮上的控制代码,有点儿麻烦哦,可要用心听啊。 现在我们先来写一个最简单的按钮代码(注意,这些代码不是写在帧上面的,而是写在按钮上面的): on?(press)?{ stop(); } 凡是按钮代码,都是这个样子的。别急,听我一句一句地解释。 先是一个on?,意思是当什么什么的时候。后面有一个小括号,小括号里面的press,意思是“按下”。这一部分的意思就是:“当按钮被按下的时候”,后面接下来是一个大括号。大括号里的命令就是所要执行的。这儿是停止。就是说:一个动画正在播放,不管它放到第几帧了,只要一按这个按钮,动画就停止住了。如果我们这样写: on?(press)?{ gotoAndPlay(30); } 那么,当一按下的时候,这个动画不管播放到第几帧了,它立即会跳到第三十帧开始继续播放。 按钮很厉害是不是?现在我们换一个写法: on?(release)?{ gotoAndStop(69); } 现在我们注意到:小括号里写的不是press,而是release,这是什么意思?这是“松开”的意思。也就是说:在用户按下(press)之后,还不执行,一定要等用户松开鼠标,才开始执行后面大括号里的命令。这样给用户一个反悔的机会。要是他不想松开而移走了鼠标,就不会执行。一般我们用release比较多一些。那么上一句的意思就是:当用户按下按钮并松开鼠标的时候,就跳到第69帧停住。 好了,别说太多了。这一

课我们学到了按钮代码的写法,这像是一种公式化的东西。在代码学习中,尤其要注意公式化,规范化。可不要把大括号忘记掉了,有时写了前面的大括号,忘记写后面的大括号,或者把大括号的左右方向写错了。我经常丢三拉四的,你可别学我哦! 记住这两个单词:press?release 第四课:StartDrag(拖动) 前面三课,我们学了几个单词啦?学了几条语句啦?可不要前学后忘,跟熊?瞎子搿棒子似的呀! 其实,我们前面学到的,是最简单,最常用的了。你已经可以做出很规范的MTV来了。 什么是规范的MTV呢?就是网页一打开,就有一个画面。而这个画面是停止的。因为有时,用户还没有决定,究竟要不要往下看。可能他这时有事要走开,去倒杯水啦,上趟卫生间啦,过一会儿来看;也可能他是看过的,不想继续往下看。所以,最好是一打开是停止的。所以,你一定是在第一帧上写了一句: stop();你也正好趁此机会,在第一帧上来个简单的内容介绍,做做广告。标题,内容简介,作词作曲什么的,引起观众的兴趣。然后,在画面的一角,出现一个漂亮的按钮,上写play。让观众来按,这一按,影片就开始了。这个按钮上,你一定是写上了: on(release){ gotoAndPlay(2); } 到了影片结束了,让它停止。在最后一帧写上stop。这时,你又可以做广告了,动画制作人,QQ号,Email,谢谢观赏之类的。这时,在画面上又出现了一个“重播”按钮。如果观众想再看一遍,一按就又从头放了。这个按钮上写的什么代码?我不说了。你一定能猜出来。 这些都是很亲切的很人性化的东西。以人为本嘛。这些就是规范化的了。 可以说,你学到了前三课,已经进入了一个新的阶段,祝贺你! 今天,我们要继续前进。不让你有喘息的机会,嘿嘿! 在学习新课之前,先得解决新概念的问题。 我们知道:符号有三种,一是图形、二是按钮、三是影片剪辑,即 MovieClip,简称MC。(以下我只提MC,也让我打字轻松点)。MC是最有用的东西了,编写代码离不开MC。因为它可以有实例名。什么是实例名呢?哇,问题太多了,这些书上全有详细的说明,我就不多说了。我们还是先来举个例子吧。 先做一个MC,名叫:s?里面有一个圆。然后到主场景,把这个圆拖出来。(这就是MC的实例)。点中这个圆,到属性栏,给它起个实例名,叫p。(注意不要把MC的名字与它的实例名搞错了。他们的关系好比是父亲与儿子的关系。我们可以指挥儿子,不能指挥老子。这一点千万拜托搞清,记得牢牢的。) 现在我们做一个“开始拖动”按钮,在按

钮上写: on(press){ startDrag("p",?true); } 这一句就是今天我们要学的。是“一按下就开始拖动”意思。小括号里是两个参数,逗号前的是第一个参数,就是拖动什么东西?这个p就是我们所要拖动的实例名。假定在场景中有好多个实例名,你一定要指定是哪一个,用引号引起来。逗号后是第二个参数,true在英语里是“真实的、对的”的意思。放在这儿,是指一开始的时候,让这个实例在场景的中心。 这下我们知道怎么用鼠标来拖动一个东西了吧! 那么怎么把它放掉呢,老是粘在鼠标上总得放掉吧?好的。可以用这个语句: stopDrag(); 这个语句的括号里是没有参数的。跟stop();相似,也是不用写入参数的。而且这个语句跟startDrag();是一对儿,可以一起记。 现在我们在主场景中放上一个“结束拖动”按钮,写上: on(press){ ?stopDrag(); } 意思是一按这个按钮,就放掉粘在鼠标上的东西。好了,你做一下试试,体验一下以便加深记忆。这一课非常重要,是进入第二阶段的基础. 第五课:常量与变量 放心,这一节课,我们不学任何新的英语单词。你可以花时间来背诵前面学过的单词与语句。 这节课,我们先来学习常量与变量。 什么是常量?就是在程序中自始至终保持不变的数值。 常量分为三种: 一、数值型常量:是具体的数值,可以用来计算的数。如725、18等。如用加 法,则725加18等于743。完全可以用数学方式来处理,如乘法、除法、减法,开方,平方等。 二、字符串型常量:是不可计算的字符,如“abc”、如电话号码“8824517”(而不是八百八十二万四千五百一十七)。字符串型常量一定要用引号。字符串也可以用加法,不过,它只是把两个字符串连起来,如“abc”+“8824517”=“abc8824517” 这好像是个汽车牌照了。如果是字符串“725”加上字符串“18”,就成了“72518”,只是一个号码,而不是数值。这一点一定要搞清楚。当然,我们也可以用一种手段,根据需要,把数值变成电话号码,或者把纯数字的字符串,(如“8824517”)变成数值。但含有英文字母或中国字的字符串则是无法互换的。字符串只有加,不能进行减、乘、除及其它数学方式。 字符串还有一个*作符--连接*作符add。如: p?add?i 结果就是pi。如果初始值i=5,尽管这是一个数值,我们也因有add的存在而把它看作是字符串,结果得出的是p5。或者可以说:add会自动把前后两个全部当作字符串而连接起来。 也就是说:add只能连接两个字符。这个add也会经常用到的。 三、逻辑型常

量:表示逻辑的真和假,只有两个值:"true"(真)或是"false"(假)。比如说:太阳比地球大,这个值就是“true”,说地球比太阳大,这个值就是“false”。在FLASH中,经常用来作出判断:如果是“true”,就做什么动作;如果是“false”就做另外的动作。这就是逻辑型的。 这三种常量经常要用到的。我们一定要分辨清楚。 接下来说一说变量: 变量是用于存储可变数据的命名单元,可以用来记录一些在影片播放时改变了的值,或是计算某些条件是真还是假。一般都是一些英文字词。如你可以写: a=0,i=1,sum=100,word="hello!"。但是有些单词是FLASH内部专用的,你不可以再用来当作变量名。如:if,goto,play,stop等等,当然也不能是true,false。 在首次定义一个变量时,最好赋给它一个已知的值,称为初始化变量。初始化变量常常是在影片的第一帧进行。对变量初始化使我们能够在播放影片时更容易跟踪和比较变量的值。也就是说,一开始定义变量:a=0,后来又让a再加上100,再后来,又让a除以10,最后这个a又要减去10,现在a?是多少啦?这就是变量,一直会变的。 也就是说:变量,我们看到的是字母,而实际上,它是代表着前面所说的三种常量的。 一开始说这一课不学单词的,结果还是学了一个:add。 第六课:duplicateMovieClip(复制电影) 雨点是如何做的呢?是做上几百个小雨点从空中落下来吗?那不是太累啦! 这儿就用上了标题的这个让语句了,复制影片。 我们先来看看制作的方法与过程:(//后面是说明与解释) 先做一个MC:drop。小细线,由上而下,在水面时变成一个扁圆水波放大后消失,最后一帧写上STOP。共36帧。然后,再做一个MC:rain。共两帧。把drop拖入到场景中,实例名为drop1。加一层代码层。在第一帧写: duplicateMovieClip?("drop1",?c,?c); //复制这个drop。新名字为c,深度也是c。 setProperty?(c,?_x,?random?(400)); setProperty?(c,?_y,?random?(100)-100); //设定复制品的坐标。X随机,在0至399之间;Y随机,在-100至1之间。 第二帧写: gotoAndPlay(1); //?继续在不同的地方复制雨线。这样就会不断地产生雨线了。由于仅两帧,前面的雨还没消失,后面的雨又复制出来了。 最后把这个MC:rain拖到主场景就可以了,就这么简单。 这个语句小括号里有三个参数。第一个是所要复制的影片的实例名。注意: 这儿制作的MC的名字是drop,而实例名是drop1。所以,第一个参数里写的是实例名。不要搞错了。这个容易混淆。 第二个参数是新的实例名,也就是复制品的实例名。这里是c。 第三个参数是深度。因为复制出来

的东西,是分成层来显示的。一个层只能放一个复制品。如果几个复制品都放在同一个层,而且位置也一样的话,那么新的复制品就会把旧的复制品盖住了。这里是c。是随意起的。 这样就可以产生一个复制品了。 现在我们再来看以下的这两句: setProperty?(c,?_x,?random?(400)); setProperty?(c,?_y,?random?(100)-100); 这个语句的意思是设定影片的属性。它也有三个参数: 第一个参数是要设定的影片的名称。这儿是c,就是复制品的名称。 第二个参数是属性的名称。一个影片剪辑的属性有许多呢,如透明度(_alpha)、旋转角度(_rotation)、宽度(_width)等等。它们的特点是都用下横杠线打头的。这儿的第一句中_x是指x坐标;第二句中的_y是指y坐标。就是要设定复制品的坐标。 第三个参数是属性值。那么x的坐标值究竟设定为多少呢?是 random(400)。本来,这儿的x坐标也可以设为100,200,一个数字就行了。但是因为我们下雨是随机的,所以设定为一个随机数。这是一个随机数的表达式。是随机产生一个小于400的数字。即从0至399随机产生一个数。y的值也是一个随机数。产生的是从0至99中的一个数,再减去100,结果就是从-100到-1中的一个随机数。 通过这两句,就把复制品的坐标定下来了,它会出现在某一个地方。随着不断地复制,不断地消失,这雨就下个不停了。 这一课学了两种很有用的语句,还学了一点MC的属性及随机数的知识。内容比较多,好好消化哦。 第七课:LoadMovie(载入外部影片) 我们如果要制作如电视中的画中画的效果,可以利用这个语句来载入另外的swf文件。为了控制外来动画的位置,我们需要先制作一个空MC。名为loadswf。 现在把这个MC拖入主场景,实例名为load。现在我们看到在主场景中只是一个小圆点。这个小圆点将会成为载入的影片的左上角。因此,你要记下这个小圆点的XY坐标。这样,你就可以知道:将要载入的影片会出现在什么地方,如果不合适,就要把这个小圆点移动一下位置。 ?现在假定我要载入的SWF文件是jisuanqi.swf。 在主场景放上一个按钮,写上代码: on?(press)?{ loadMovie("jisuanqi.swf",?_root.load); } //当按下按钮后,就载入外来动画给名为load的MC实例。 如果要变化一下影片的大小,实际上是变化了load的大小。所以,可以再制一个按钮,写上代码是: on?(release)?{ setProperty("_root.load",?_xscale,?60); setProperty("_root.load",?_yscale,?60); } //这是把这个MC缩小到百分之六十。这里是设定MC的属性。_xscale是指原MC的宽,60是百分比。 如果要移动MC的位置:再加一个按钮,

写上: on?(release)?{ setProperty("_root.load",?_x,?50); setProperty("_root.load",?_y,?50); } //这是把MC从原来的坐标移动到XY都是五十的位置上,也就是说:影片的左上角的位置是50,50。 如果要卸载的话,再制作一个按钮,写上代码: on?(release)?{ setProperty("_root.load",?_xscale,100); setProperty("_root.load",?_yscale,?100); setProperty("_root.load",?_x,?250); setProperty("_root.load",?_y,?50); unloadMovie("_root.load"); } //这里是在卸载之前,先把MC的一切复原,然后再用卸载语 言,不然的话,下一次再载入就不一样了。 制作完毕后,保存为loadmv.swf。这个文件一定要与外来动画jisuanqi.swf放在同一个目录中。才能有效。 第八课: 前面我们学了多少个语句啦?我没数过,不知你记住了多少? 现在我们要学一个非常重要非常有用的语句,利用这个语句,我们可以将动作引向当前时间线以外的任意时间线,从而控制当前影片以外的其他MC。也就是说:我们可以站在这个MC的位置上,去指挥别的MC的动作。这是不是很神奇?它只有一个参数,就是所要控制的那个MC的实例名。比如说下面的按钮代码: on(release){ tellTarget("_root.colorBall"){ gotoAndStop(5); } } //这个按钮如果按下再松开,就可以命令另外一个名叫“colorBall”的MC跳到它的第五帧并停在那儿。这个第五帧不是主场景的第五帧,而是那个MC的第五帧。也可以改变它的属性,放大缩小或是透明度或是移动位置。 如果一个影片中有好几个按钮,也有好几个MC,它们都可以利用这个语句来互相指挥。 下面我们来看一个例子来说明这个语句的功能: 这个帽子运动是一个MC。实例名为h。第15帧前是行走,后面是翻滚。我们用了四个按钮来指挥它。 第一个按钮是开始运行: on?(press)?{ tellTarget("_root.h"){ gotoAndPlay(1); } } 第二个按钮是让它停止在第18帧上: on?(press)?{ tellTarget("_root.h"){ gotoAndStop(18); } } 第三个按钮是将它放大一倍: on?(press)?{ tellTarget?("_root.h")?{ setProperty("_root.h",?_xscale,?200); setProperty("_root.h",?_yscale,?200); } } 第四个按钮是让它复原大小: on?(press)?{ tellTarget?("_root.h")?{ setProperty("_root.h",?_xscale,?100); setProperty("_root.h",?_yscale,?100); } } 第九课:条件语句if及switch 我们经常要判断根据什么条件,再来执行什么命令。这就是条件语句。它的一般格式是这样的: if(条件){ 符合条件就......; }else{ 不符合条件就......; } 例如: if(a=0){ b=0; }else{ b=1; } //a=0是条件。如果是,那么就让b也等于0。如果a不是0,那么就让b=1。 这是在只有一个条件的情况下的语句。要是有好几个条件,会得出不同的结果,怎么写

呢? 下面这个例子很好地说明了它的用法。我们想把学生的不同考分来区别不同的级别。不足60分的定为D级,60以上不足70分的定为C级,70以上不足85分的定为B级,85以上不足100分的定为A级。下面的例子中,result是学生考分,grade是级别。 if(result<60){ grade="D"; }else?if(result<70){ grade="C"; }else?if(result<85){ grade="B"; }else?if(result<=100){ grade="A"; } 这样四个条件,就得出四种不同的结果。包含了全部的可能性。 下面我们再来看一个特殊的条件语句:switch。 例如:在电脑中,星期日是用0来表示的,星期六是用6来表示的。我们需要把数字转换成中文。假定我们以day作为星期值的变量。那么,day=0,就是星期天,day=6就是星期六。一共是七个数字。我们要以week来表示中文。以下语句就是用来把数字转换成中文的。 switch?(day){ case?0: week="星期日";break; case?1: week="星期一";break; case?2: week="星期二";break; case?3: week="星期三";break; case?4: week="星期四";break; case?5: week="星期五";break; case?6: week="星期六";break; } switch会对后面括号里的条件进行判断,如果条件的值等于case后面的值,就执行紧跟的语句块,执行之后,再根据break,跳出switch语句,结束执行。现在下面有七个case,只要day的值等于case其中的一个值,它就会执行case的冒号后的命令,然后因为有一个break,它就会执行后跳出。我们假定day是3,那么,就会到case?3去,执行:week="星期三",再跳出去。这样就得到了week的中文。要注意的是:这里case的值是一个明确的固定的数值,不适合大于多少小于多少。另外,如果没有break,它就不会跳出,而继续向下看条件来执行。 第十课: 循环语句:for 我们经常会用循环地执行同一个命令,直到不需要执行为止,这样,使用循环语句就很方便了。 我们先来看for的一个例子: for(i=1;i<100;i++){ duplicateMovieClip("segment","segment"?add?i,i); } 这是在复制MC的时候常用的一种写法。for后面的括号中是它的参数。第一个参数是起始值。就是说,这个循环从i=1开始。第二个参数是结束值。这里是i<100,就是到了99之后就终止循环。第三个参数是步长值,i++的意思是变量自加1。就是每一次循环就加上1。这样我们可以知道,一共会循环99次。每一次的i值都会加上1,就是1,2,3,……一直到99为止。在大括号里就是执行的命令。这里是复制MC,其实例名叫segment,这个命令我们前面学过了,括号中的三个参数中,第一个是要复制的MC目标名称。第二个是复制品的名称。那么这儿的复制品的名称就是segment1,segment2,……一直到segment99为止。第三个参数是复制品

的深度。每一个复制品的深度都跟它的编号是一样的。这样,一共会产生九十九个复制品。这就是利用了循环语句。 第十一课:关于MC的路径 我们经常看到这样的代码: on?(press)?{ tellTarget?("_root.h")?{ setProperty("_root.h",?_xscale,?200); setProperty("_root.h",?_yscale,?200); } } 这里面的_root就是一个MC的路径。因为我们如果要指挥一个MC,就要指明这个MC在什么位置上。在FLASH中,有主场景,自然就有分场景,也就是说:主场景是最高级,其它MC是主场景的下级,有时MC还有自己的下级MC。所以,我们在调用一个MC的时候,除了要标明MC的实例名以外,还得标明它的路径,也就是沿着什么路可以找到它? 在一般情况下,我们把主场景称为_root,在英语里是“根”的意思。也可以称为_level0,是第零层的意思。这儿的层跟图层是没有关系的。我们可以理解为影片层,就是影片已经做成之后所组成的一个总的层。主场景里可以有许多的图层。但做完了之后,只能组成一个主场景电影层。也可以理解成只有一条时间轴。而一个MC有它自己的一条时间轴,尽管它也有好多个图层。那么,这个MC也成为独立的一个电影层。 为了说明问题,我们来假定一下: 1、主场景; 2、MC1,它里面还包含一个MCa。 3、MC2。 第一个级别是主场景。第二个级别是MC1和MC2,它们俩是平级的。第三个级别是MCa,因为它是包含在MC1的里面的。 现在我们先学用绝对路径来表示: 表示MC1的写法是:_root.1 如: tellTarget?("_root.1"){ setProperty("_root.1",?_xscale,?200); setProperty("_root.1",?_yscale,?200); } 表示MCa的写法是:?_root.1.a 如: tellTarget?("_root.1.a"){ setProperty("_root.1.a",?_xscale,?200); setProperty("_root.1.a",?_yscale,?200); } 至于MC2的写法请你来写吧。这就是绝对路径的表示法,它总是从主场景开始向下数的。也就是说:总是先站在主场景的位置来挨着排下去的。绝对路径是比较好理解的。 下面我们来看一下相对路径: 如果每一次都要从主场景开始排起,有时会感到反而麻烦。因为有时,我们不是在主场景来写代码,而是在下一级写代码,也就是说:假如我们是站在MC1的立场上,要指挥下一级MCa,就没有必要再回到主场景来排队,只要写成“/MCa"就可以了。如写在MC1上的代码是: tellTarget?("/a"){ setProperty("/a",?_xscale,?200); setProperty("/a",?_yscale,?200); } 注意:这几句代码不是写在主场景的帧上面的,而是写在MC1身上的。你会在MC上写代码吗?这就跟在按钮上写代码差不多,先点中MC1然后打开写代码的面板。 那么,如果要

在MCa上写代码来指挥它的上一级MC1,怎么写呢?上一级的相对路径的写法是:“../”。就是写成: tellTarget?("../"){ setProperty("../",?_xscale,?200); setProperty("../",?_yscale,?200); } 而在点语法中,可以写成:“_parent”。如: onClipEvent(load){ _parent._xscale=150; _parent._yscale=150; } 相对路径的出发点不是在主场景,而是从自身所在点出发。这就是与绝对路径不同的地方。如果你觉得有点糊涂的话,不如干脆全部采用绝对路径则更清楚简单了。

相关文档
最新文档