落岸天使论坛

 找回密码
 注册
搜索
论坛,不要冷落了陌生人新人注册后在此报道,奖励20羽毛:)严肃处理违规灌水行为及处罚办法
参与论坛宣传活动,获得积分勋章奖励知羽艺匠及其他模板资源下载珍惜你的ID 珍惜你的名誉
查看: 1743|回复: 1

[原创] Flash AS简易教程(1)

[复制链接]

23

主题

129

回帖

181

积分

雾天使

Rank: 2

积分
181
发表于 2007-5-19 15:08:16 | 显示全部楼层 |阅读模式
写在前面的话——不得不读的话
                     
这本电子教案以简单为目标。我希望把它写成世界上最简单的AS教程。你每天只需花15分钟来试验,在不到15天的时间你就可以轻松用AS来写你的动画。到现在为此我只写了12个15分钟。如果有用我会继续写下去,现在只是一个试探阶段。这12个15分钟是:

□        第1个15分钟 变量
□        第2个15分钟 函数
□        第3个15分钟 if条件
□        第4个15分钟 switch条件
□        第5个15分钟 循环
□        第6个15分钟 对象
□        第7个15分钟 影片剪辑的属性
□        第8个15分钟 加载影片剪辑
□        第9个15分钟 拖动影片剪辑
□        第10个15分钟 遮照影片剪辑
□        第11个15分钟 复制影片剪辑
□        第12个15分钟 加载声音

AS可以写在上个地方:时间轴上的关键帧上;影片剪辑上和按钮上。这只是为了方便而已,实际上你可以把AS全部写在时间轴上的关键帧上,只要你搞懂目标路径和事件的概念。如果此话不明白,请跳过就是了。        任何语言都需要一些“黑话”。同样我们的AS也需要。        一般AS中把要执行的语句放在大括号内:{}。例如:
        _root.onEnterframe=function() {
           //顺便说一句,前面的“//”是解释说明,在执行语句时AS会跳过,如果要换行还需要“//”。
           //这一条语句死记就可以。在影片只有一帧时用的最多。表示的意思是不断触发第一帧。
      }
        另外我们AS用来测试计算结果的方法是使用函数trace (参数)。这里的参数可以是变量,可以是表达式,可以是函数------
        好了,现在我们就开始第一个15分钟。
第1个15分钟 变量
        要在15分钟内知道变量,可能吗?
        先看看再说。不管如何一定要记住:变量是存贮任何类型数据的标识符。既然是存贮,那么变量应是一个容器。不错,它相当于一个茶杯一样,可以装茶,可以装水,当然还可以装酒。然而,在AS中,不会让你画一个茶杯来表示变量。但是,你可以给茶杯起一个名称,叫a也好,叫b也无妨。这个名称就是标识符。不过这个标识符的选择也有一些规定,甭管它什么规定,你就用字母来命名,如果提示你不行的话,换一个就是。完了以后,查一下帮助文件内的命名约定。
        现在让我们来试验一下。
        打开Flash,用鼠标在时间轴的第一帧右击或按F9,打开动作编辑器。如果是标准模式,请转到专家模式。在编辑窗口中输入以下数据:
       
a=4
        b=5
        trace(a+b)
       
        “a=4”表示我是一个变量,我的名字是a,现在我代表4。除非你改变我,否则我一直代表4。用专业的术语说就是:声明变量a,并赋值4。这里的等号表示赋值的意思,不是等于的意思。要表示等于用“==”。两个等于号表示等于的意思,没办法,人家就这么规定的。《林海雪原》中田司令说:不懂土匪的黑话,打不了土匪。人家老扬就会这一招。
        按Ctrl+Enter测试一下电影,输出窗口中显示9。是白痴都知道a+b=4+5=9。
        这里的a,b是可以计算的。
        如果改成下面的:
               
a=“4“
        b=“5“
        trace(a+b)
       
        想想输出窗口是什么?“9”吗?错误。应是45。为什么呢?跟我一起回想一下变量是什么?变量是存贮任何类型数据的标识符。注意“类型”两字。人有男女之别,变量当然有类型之分。变量可以有数值型,布尔型,字符型,对象型。
        数值型可以用于加减乘除。
        布尔型只有真假两个值,常用于条件判断。例如:
       
a=4
        b=5
        trace(a>b)
       
        输出的值不是4>5,而是false。
        方式被引号引起来的就是字符型。而不管它是单引号,还是双引号。
        对象型主要包括影片剪辑,文本块,组,按钮,组件。现在不明白,就不要管它。反正有一句话叫:船到桥头自然直。

第2个15分钟 函数
        在未接触AS之前,问你函数是什么?映入头脑中的恐怕就是一些x,y之类的符号吧!AS中的函数追根揭底和数学上的函数是一回事。但是我不想把它搞得太复杂。只想给它下一个明了的定义:能执行某种功能的语句组合。从函数的英语function就知道,它还有一个意思是功能。也就是说AS中的函数没有某种功能我们宁愿不叫函数。
        例如:你想在0~9中的10个数值随机产生一个,只需在时间轴的关键帧上右击然后单击动作和按F9,输入下列语句就可以:
       
        trace(random(10))

        按Ctrl+Enter测试,输出窗口会随机产生0~9中的数值。
        AS中的函数分为内置函数和用户自定义函数。像上面的random(参数)就是内置函数,这样的函数在Flash中有很多,例如获取字符串长度的函数mblength(参数),获取指定字符串中的某一段字符的函数mbsubstring(参数,数值,数值)。根据你的需要,你可以查看AS手册。尽管有很多内置的函数,一般可以分为数学函数,转换函数和其它函数。
        下面一个“打字效果”的例子能很好的说明内置函数的应用。首先打开Flash新建一文件,在场景1中创建一个动态文本,在属性检查器中选择“多行”,输入变量名为“a”。
        然后在时间轴的第一帧按F9,打开动作编辑窗,在专家模式中输入下面语句:

        i=1                     //“//”后的不必输入,只起解释说明的作用。i的初始值为1。声明变量i.
        tt=”打字效果的实现很简单,就是几句代码。”  //动态文本中要依次显示的文字,把它赋给变量tt
        _root.onEnterframe=function() {                //由于只有一帧,所以需要此语句不断触发帧
             if (i<=mblength(tt)) {       //条件判断,在i小于字符串长度时,执行下面的语句
             i=i+1              //i的值增加1
             a=mbsubstring(tt,1,i)   //从第一个字符开始获取tt中一段字符,并把它赋给a
                } else {                  //否则,条件为假时
             stop()           //停下来
          }          //和else成对的大括号
      }              //和第3句成对的大括号

按Ctrl+Enter测试        ,效果是不是很棒。
再多的函数也有不够用的时候或不合习惯的时候,例如正弦函数Math.sin(弧度),这里的角是以弧度为单位的,不合我们的习惯。为了适合我们的习惯,你可以定义一个直接输入度数的正弦函数sinD()。在时间轴的第一帧按F9,打开动作编辑窗,在专家模式中输入下面语句:

function sinD(d) {                            //表示构造一个名为sinD()的函数
   return Math.sin(d*Math.PI/180)  // Return表示当函数调用时会返回一个值,Math.PI是一个常数π
}
trace(sinD(30))

输出窗口中是不是0.5?当然你也可以试验trace(Math.sin (30)),结果不会是0.5。

第3个15分钟 if条件
        以前读书上劳动课时,老师喜欢说男生扫地,女生擦桌子。只要你是本班的学生你就知道是扫地还是擦桌子。这实际上就是一个条件判断,可以做如下的流程演示:

a=本班的学生
a是男生吗?
是,就扫地。
不是,就擦桌子。

上面的流程我们可以这样理解,先声明变量a,并给它赋值本班的学生。然后再进行判断。如果用AS的“黑话”来表示就是下面的形式,不过这些只是为了便于理解,不要直接拿去试验。

a=本班的学生
if (a是男生) {
  扫地
} else {
擦桌子
}

从上面的语句我们不难看出if后的括号内是条件,如果满足这个条件,就执行下面的语句。否则就执行else后面的语句。当然这并不是说if后面就一定要有else。如果条件为假时不需要执行语句,就不必跟else。不管如何,一个if一对大括号{},一个else也要一对大括号{},一个else if还是一对大括号{}。这个规定切记。下面给出条件判断的几种形式:

if  (条件表达式) {
   执行语句
}

if  (条件表达式){
   执行语句
} else {
   执行语句
}

if (条件表达式){
   执行语句
} else if (条件表达式) {
执行语句
} else if (条件表达式) {
执行语句
}

条件表达式应该是一个能被判断真假的语句。它返回的值是一个布尔型的变量。例如声明变量a=4,如果用a>5作为条件表达式,那返回的值是false,肯定执行else后面的语句,没有else,就不会执行if内的语句。看了这么多,现在我们就用它来做一个游戏轻松轻松:
打开Flash,并新建一个文件,然后按Ctrl+F8,在出现的对话框中确选“按钮”,确定后,创建一个按钮。按钮上写上“碰碰运气”,回到场景1中,并打开库,把刚才创建的按钮拖入舞台上。只选择按钮,打开动作编辑器,输入下面的代码:

on(release){  //如果在标准模式下输入,前面的语句会自动添加;专家模式需手工输入。它只表示单//击按钮,然后执行写在按钮内的AS脚本。
a=random(2)    //声明变量a,随机函数random(2)产生0和1两个数值
if (a==0) {
                   trace(“你今天的运气不错!”)
} else {
                 trace(“你今天的运气真差,不过没关系,还有明天!”)
}
}

测试影片,单击一下按钮,运气还好吧。如果你还嫌不过瘾,不妨多来点条件判断。

on(release){
a=random(4)  
if (a==0) {
                   trace(“你太棒了!”)
} else if (a==1) {
                 trace(“你一定会成功的!”)
} else if (a==2) {
                 trace(“一时失意没关系,只要努力!”)
} else if (a==3) {
                 trace(“你一定会成功的!”)
}
}

测试影片,单击几次按钮,变化是不是多了?
条件判断非常有用的,例如你可以思考下面的问题:

如何实现登陆用户的验证?

为了简单起见,场景中只用一个输入文本和一个登陆按钮。AS脚本写在按钮内。提示一下:获取输入文本中的内容用:实例名称.text。注意实例名称和text之间要有一个点。




       
第4个15分钟 switch条件
        一般来说解决一个问题会有多种方法。根据条件判断执行语句我们还有一条语句。那就是switch条件。这条语句我曾一度回避,总认为有If何必麻烦switch,况且字母那么多,又难记。直到在写一个计算器的代码时,才发现用switch思路清晰多了。
        switch使用方法如下:

        switch ( number) {
         case number可能取的值:
         break
     }

        number应是一个数值型的变量,在每一个条件执行完后最好加上break跳出来,以防继续执行下去。因为没有break,switch会忽略条件判断。你不妨分别试验下面的语句:
   
        a=random(3)
switch (a) {
   case 0:
     trace(“你太棒了!”)
   case 1:
      trace(“你一定会成功的!”)
   case 2:
      trace(“一时失意没关系,只要努力!”)
}

a=random(3)
switch (a) {
   case 0:
     trace(“你太棒了!”)
     break
   case 1:
      trace(“你一定会成功的!”)
      break
   case 2:
      trace(“一时失意没关系,只要努力!”)
      break
}

另外还需注意“case number可能取的值:”后面的冒号。没有冒号会产生错误。如果会产生case判断的其它情况,请在后面加上“default:”。

23

主题

129

回帖

181

积分

雾天使

Rank: 2

积分
181
 楼主| 发表于 2007-5-22 09:29:34 | 显示全部楼层
怎么没有人发表意见
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|落岸天使论坛

GMT+8, 2024-11-23 05:51 , Processed in 0.108043 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表