FLASH动作脚本详解

您所在的位置:网站首页 flash输入代码 FLASH动作脚本详解

FLASH动作脚本详解

2023-06-25 09:51| 来源: 网络整理| 查看: 265

FLASH动作脚本详解

一、FLASH脚本基础入门讲解

二、按钮AS的编写

三、影片剪辑的AS编写

四、动态文本框

五、影片剪辑的拖拽

六、流程控制与循环语句

七、绘图及颜色的AS的编写

八、声音 AS 的编写与控制

九、时间日期的 AS编写

十、点语法以及路径

十一、深入了解时间控制

十二、无条件转移

十三、变量

十四、运算符(一)

十五、变量(二)

十六、影片剪辑的属性

十七、再讲循环语句

十八、影片剪辑处理函数

十九、复制影片剪辑

二十、深入 startDrag()与 stopDrag()

二十一、for循环

二十二、while与 do while循环

二十三、循环语句的嵌套

二十四、组件

二十五、播放器控制与网页连接以及动画发布输出

二十六、loadVariables命令

二十七、影片剪辑的深度

二十八、文本框

二十九、超文本标签

一、FLASH脚本基础入门讲解

认识“动作”面板  在Flash中,动作脚本的编写,都是在“动作”面板的编辑环境中进行,熟悉“动作”面板是十分必要的。按【F9】键调出“动作”面板,可以看到“动作”面板的编辑环境由左右两部分组成。左侧部分又分为上下两个窗口。。左侧的上方是一个“动作”工具箱,单击前面的图标展开每一个条目,可以显示出对应条目下的动作脚本语句元素,双击选中的语句即可将其添加到编辑窗口。   下方是一个“脚本”导航器。里面列出了FLA文件中具有关联动作脚本的帧位置和对象;单击脚本导航器中的某一项目,与该项目相关联的脚本则会出现在“脚本”窗口中,并且场景上的播放头也将移到时间轴上的对应位置上。双击脚本导航器中的某一项,则该脚本会被固定。   右侧部分是“脚本”编辑窗口,这是添加代码的区域。可以直接在“脚本”窗口中编辑动作、输入动作参数或删除动作。也可以双击“动作”工具箱中的某一项或“脚本编辑”窗口上方的【添加脚本】工具 ,向“脚本”窗口添加动作。

  在“脚本”编辑窗口的上面,有一排工具图标,在编辑脚本的时候,可以方便适时的使用它们的功能。

 

  在使用“动作”面板的时候,可以随时点击“脚本”编辑窗口左侧的箭头按钮,以隐藏或展开左边的窗口。将左面的窗口隐藏可以使“动作”面板更加简洁,方便脚本的编辑。

  好了,动作面板就介绍这些,有个印象,不要求记住,工具栏上每个工具的作用和功能将在以后的课程中边用边熟悉。

 

如何编写flash中的脚本

 

首先,要知道编写脚本,不需要用户对AS有完全的了解!

  现在要考虑的问题是,如何在你的flash中添加编写脚本?简单的说,添加脚本可分为两种:一是把脚本编写在时间轴上面的关键桢上面(注意,必须是关键桢上才可以添加脚本)。二是把脚本编写在对象身上,比如把脚本直接写在MC(影片剪辑元件的实例)上、按钮上面。

  此外,大家也需要简单理解一下flash是如何执行你编写的脚本的。当你在时间周的关键桢上添加了脚本,那么当flash运行的时候,它会首先执行这个关键桢上的脚本,然后才会显示这个关键桢上的对象。

  还有一些简单的知识,AS中的对象都包括什么呢?它可以包含数据,也可以是舞台上的电影剪辑,也可以是舞台上的按钮等。既然包含了那么多对象,那么每种对象肯定有各自的属性!比如电影剪辑(movieclip)对象,它的:属性就有_height(高度),_rotation(旋转),等,这些属性不需要你去特意的记忆,当使用的时候可以随时翻阅脚本字典。在以后的教程中会陆续给大家介绍一些基础脚本的使用技巧。

  

  二、需要学到的基本AS命令如下:

  stop()、play()、gotoandplay()、gotoandstop()、nextFrame()、prevFrame();、nextScene()、prevScene();、stopAllSounds(); 按钮的AS编写规则

 

播放

on (release) {_root.mc.play();}

  如果要在按钮身上写脚本的话,必须使用on(事件){//脚本程序}的格式来写!上面的脚本作用就是:当你在这个按钮上按一下鼠标(release事件)的时候,就会执行下面的_root.mc.play();程序,它的意思是让舞台上的mc开始播放!

  6、同理:咱们选中舞台上的暂停按钮,在它上面输入:on (release) {_root.mc.stop()}

  然后依次在快退上输入:on (release) {_root.mc.prevFrame(); //prevFrame表示回到动画的上一桢}

  在快进的按钮上输入:on (release) {_root.mc.nextFrame();}  在停止的按钮上输入:on (release) {_root.mc.gotoAndStop(1); //跳到mc影片的第一桢,并停止播放!}

二、按钮AS的编写

在 flash 中的交互功能一般是由按钮来完成的。掌握按钮的编写规则也是一个闪客的基本技

能。

OK,现在咱们来说说按钮脚本如何编写。上一讲中提过,AS 脚本编写可以写在时间轴的关

键桢上,也可以写在对象本身上面。按钮也不例外,既可以写在时间轴上,也可以写在按钮

本身上面。只不过这两种编写规则都要遵循一定的规矩,这是后话。

现在咱们来做一个例子, 做一个按钮, 这个按钮要实现的功能就是打开一个指定的网页。

(这个例子非常基础,用这个例子来讲解按钮 AS 两种编写方法。)

第一种:把脚本写在按钮本身。

一、 在舞台上绘制一个矩形,选中矩形并按 F8,将这个矩形转换成按钮元件。

二、 编写动作脚本:

选中按钮,按 F9,打开动作面板,在专家模式下输入以下脚本:

on(release){

getURL("http://3800hk.com/","_blank")

}

现在这个按钮就实现了一个打开网页的功能。通过例子你应该注意到,按钮的 AS 书写规则

就是:

on(事件){

//要执行的脚本程序,刚才的例子是用 getURL 来打开一个网页。你也可以使用脚本程序来

执行其他功能,例如跳转到某一个桢,或载入外部一个动画文件。

}

大可以看到,其实就一个 on语句,这个 on语句就是按钮的 AS 编写规则了。需要注意

的是 on 里面的事件,这个事件你可以理解为是鼠标或键盘的动作。刚才的例子我们使用的

事件是 release(按一下鼠标)我现在把常用的按钮事件列出来:

事件名字 说明

Press 事件发生于鼠标在按钮上方,并按下鼠标

Release 发生在按钮上方按下鼠标,接着松开鼠标时。也就是“按一下”鼠标

Releaseoutside 发生于在按钮上方按下鼠标,接着把光标移动到按钮之外,然后松开

鼠标

Rollover 当鼠标滑入按钮时

Rollout 当鼠标滑出按钮时

Dragover 发生于按着鼠标不放,光标滑入按钮

Dragout 发生于按着鼠标不放,光标滑出按钮

Keypress 发生于用户按下特定的键盘按键时

下面来看看第二种按钮 AS的编写方法。

这种方法是把脚本程序写在时间轴上,而不是按钮本身上面。

一、 选中按钮,在下面的属性面板中为按钮起一个名字,这里我起了一个 bt

二、 选中时间轴的第一桢,按 F9 打开动作面板。输入如下脚本:

bt.onrelease = function() {

getURL("http:// http://3800hk.com/", "_blank");

};

这种编写 AS 的方法要遵循的规则就是下面的公式而已:

按钮实例的名字.事件名称=function(){

//要执行的脚本程序。

}

大家只要记住这个公式就可以套用了。

按钮的 AS 就先将到这了,这个可以算是基本技能了。希望大家都能掌握。

三、影片剪辑的AS编写

影片剪辑在flash中可以说是使用最多的一种元件了,那么对于它的AS也是不

少。

在讲解之前,我还是要重新说一下电影剪辑AS 的编写规则,和上次讲按钮一样,

分为两种,一种是写在电影剪辑本身上,一种是写在时间轴上面。

一、首先我们先来做个简单的小例子。

或许你不用 AS 就能做出一个小球的移动动画。但是如果让你用 AS 来实现小球的移动呢?

下面来看看如何用 AS 来实现吧。

在这个例子里,你首先会了解到如何在电影剪辑本身上编写 AS,以及编写规则。

1、 新建立一个影片剪辑元件,里面你就随便画一个圆吧。之后把这个影片剪辑拖放到

舞台之中(也就是创建一个此影片剪辑的实例)。

2、 现在开始编写脚本,选中这个 MC,按 F9 打开动作面板,按照图 01 显示选择

onClipEvent,之后在显示的事件中选择 enterFrame,然后在里面编写脚本如下:

this._x+=5

这个脚本编写之后应该是:

onClipEvent (enterFrame) {// enterFrame的意思四以影片帧频不断地触发此动作

this._x += 5; //this 代表这个影片剪辑自身。_x 表示影片剪辑的X 轴坐标。

}

呵呵,按下你的 ctrl+回车测试一下吧,一个简单的移动动画就搞定了。

从这个例子咱们不难看出,如果把 AS 写在影片剪辑本身上,那么它是有自己的书写格

式的。正确的书写格式就是:

onClipEvent (事件) {

//需要执行的脚本程序

}

这个可以看成是公式,你记住就行了,是写在影片剪辑身上的。括号里的“事件”其实是

个触发器,当事件发生时,执行该事件后面花括号中的语句。,具体有哪些事件,我把它们

都列出来。

- load 影片剪辑一旦被实例化并出现在时间轴中时,即启动此动作。

- unload 在从时间轴中删除影片剪辑之后,此动作在第一帧中启动。处理与 Unload 影

片剪辑事件关联的动作之前,不向受影响的帧附加任何动作。

- enterFrame 以影片帧频不断地触发此动作。

- mouseMove 每次移动鼠标时启动此动作。_xmouse 和 _ymouse 属性用于确定当前鼠

标位置。

- mouseDown 当按下鼠标左键时启动此动作。

- mouseUp 当释放鼠标左键时启动此动作。

- keyDown 当按下某个键时启动此动作。使用 Key.getCode 方法获取最近按下的键的

有关信息。

- keyUp 当释放某个键时启动此动作。 使用 Key.getCode 方法获取最近按下的键的有关

信息。

- data 当在 loadVariables 或 loadMovie 动作中接收数据时启动此动作。当与

loadVariables 动作一起指定时,data 事件只发生一次,即加载最后一个变量时。当与

loadMovie 动作一起指定时,获取数据的每一部分时,data 事件都重复发生。

了解了事件之后,你可以自己试着修改一下脚本,如果让你们点一下鼠标,舞台上的圆

就移动一下,该怎么做呢?

关于把 AS 写在影片剪辑本身的例子先讲到这,下面来看看如果把 AS 写在时间轴上面

的话,应该怎么写。

首先你把刚才的脚本去掉。然后需要为这个影片剪辑实例起一个名字,比如起名为 mc

在选中时间轴的第一桢,打开动作面板,输入以下脚本:

mc.onEnterFrame = function() {

this._x += 5; //你也可以把这句改为 mc._x+=5 自己想一下为什么。

};

显而易见,在时间轴上的写法就应该套用以下公式:

实例名.事件名称=function(){

//脚本程序

}

需要注意的是,这种写法的事件名称不要忘了在前面加一个 on,比如,事件如果是

enterframe的话,你就应该写成 onenterframe

下面简单说一下影片剪辑的属性。比如,影片剪辑有自己的X、Y 轴坐标,有自己的透

明度(_alpha),这些都是它的属性。

那么如何使用这些属性呢?你可以使用“点”语法来对属性进行设置。

把上面的脚本修改一下。

mc.onenterframe = function() {

mc._x += 5;

mc._alpha = random(100);

};

这里我加了一句 this._alpha = random(100),它是设置影片剪辑的透明度的,使用的语句

就是_alpha。后面的 random()函数是随机选取一个100 以内的数字作为它的透明度。从这个

句子可以看出,“点”语法使用方法就是:实例名.属性(mc._alpha),你甚至可以简单理解为

“点”就是“的”,那么 this._alpha 这句你就可以理解为:影片剪辑 mc的透明度

上面的脚本 mc._alpha = random(100)也可以改为_root. mc._alpha = random(100)

那么,你就可以理解为:舞台上的影片剪辑 mc的透明度是随机选择100内的值。

四、动态文本框

一、flash 中的动态文本使用方法

在 flash中,文本工具提供了三种文本类型。分别是:静态文本、动态文本和输

入文本。

下面讲解的内容属于动态文本的 AS 编写规则。要创建一个动态文本非常简单,

只需要 选中文本工具,然后选择动态文本类型,然后在舞台上拖拽出所需要的

动态文本框就行了

二、如何为动态文本赋值

当在舞台上拖拽出动态文本框之后, 可以直接在里面进行文本输入或粘贴外部文

本内

容。那么用 AS 如何来对动态文本框赋值呢?在这里为大家介绍两种方法进行

赋值!

1、使用动态文本的实例名字来赋值

操作步骤:

(1)在舞台上创建一个动态文本框,并为这个动态文本实例起一个名字,例如

abc

(2)选中时间轴的第一桢,打开动作面板,输入以下脚本:

abc.text = "爱国者安全网"

按下 ctrl+回车就可进行测试了。从这个简单的例子可以知道,如果要用文本实

例名字 来进行赋值的话,必须使用以下格式:动态文本实例的名字.text=”需要

赋值的内容”

2、使用变量来赋值

(1)在舞台上创建一个动态文本框,并为这个动态文本实例起一个变量名

3800hk。

(2)选中时间轴的第一桢,打开动作面板,输入以下脚本:

3800hk= "欢迎大家来到爱国者安全网学习!"

不难看出,使用变量赋值更为简单实用!赋值格式为: 变量名=“赋值的内容”

以上两种赋值方法如果内容过多需要换行的时候,需要使用行用回车符( “\r”

即 ASCII

13)分隔!

三、如何载入外部 txt 文本里的内容

当内容过多的时候,使用上面的方法并不是太好,我们可以使用下面的方法,从

外部获 取文本资料内容!而外部的资料内容就放在一个普通的 txt(记事本)文

件中。

具体操作步骤如下:

1、创建一个动态文本实例,并为这个动态文本实例起一个变量名 hk

2、选中时间轴的第一桢,打开动作面板,输入以下脚本:

loadVariablesNum("heiying.txt", 0);//载入外部名字叫 heiying.txt 的文本文件,加载

级别为0

3、现在来准备外部的 heiying.txt 文本文件了。注意:要把这个文本文件和你刚

才做的 flash文件放在一个文件夹里!

这个 txt 文件里的资料应该按照如下格式编写:flash中动态文本变量的名字=这

里就是 所需要的资料内容。 对应上面的格式,外部 heiying.txt 中的内容为:

hk=欢迎大家来到爱国者安全网学习!

最后一点,需要将这个文本文件保存为 UTF-8 格式。

4、 完成以上步骤之后,就可以进行测试了。

下面介绍另外一种载入外部文本资料的方法, 并介绍当文本内容过多时候,如

何使用滚

动条组件

(1)创建一个动态文本实例,并并为这个动态文本实例起一个实例名字 anquan

(注: 是实例名而不是变量名)起一个变量名为 hk

(2)打开 flash 的组件面板(快捷键 ctrl+F7),找到 UIScrollBar(滚动条)组

件。按着 它不动,然后拖放此组件至刚才的动态文本实例的右部边缘,如果成

功的话,组件会和文本 框结合在一起!

(3)选中舞台第一桢,编写如下脚本:

tt = new LoadVars();//创建一个 LoadVars 对象的实例,这里的实例名字叫 tt

tt.load("heiying.txt");//创建的 tt 实例需要载入的对象是 heiying.txt 文本文件。

tt.onLoad = function(s) { //开始载入外部文件,具体格式请按照此例格式。参数 s

是指示 load 操作是否成功完成。如果完成,那么 S 的值就为 true( 真),反之

为 false(假)

if (s) {

anquan.text = tt.hk;

}//如果载入成功, 则 anquan文本框中的内容就等于 tt.实例中的 heiying的内容!

(hk是我们 外部文本文件中的变量。)

};

(4) 至于外部的 heiying.txt 还可以使用刚才所创建的文本文件 ,为了测试滚动

条的效

五、影片剪辑的拖拽

在网上经常看到的 flash影片中有的对象可以被鼠标进行拖动。例如有的类似七

巧板的拼图游戏,控制音量的滑杆等,所使用的就是 flash中的拖拽动作。

一、拖拽命令详细介绍

1、 首先介绍一下开始拖拽命令的详细用法, 稍后在后面的例子中进行测试。

命令格式: StartDrag(要拖动的影片剪辑,[是否锁定到鼠标位置中央,左,

上,右,下])或写为要拖动的影片剪辑.StartDrag([是否锁定到鼠标位置中央,左,上,

右,下])

命令讲解:在制作动画的过程中,上面两种书写方法可任选一种。其中[]

内的为可选参数,也就是可以写,也可以不写。至于左,上,右,下四个参数是

用来控制被拖对象的移动范围。

2、停止拖拽命令讲解

命令格式: 被拖动的影片剪辑实例名.stopDrag()

这样就可以停止对对象的拖拽动作。

二、实例讲解

下面来用一个简单的例子实验拖拽命令。

操作步骤:

1、新建一个 flash 文档,并在舞台上绘制一个圆形。选中圆形并按F8,

将此圆形转换为影片剪辑,起名为:圆 。确定后将会在舞台上创建一个圆的实

例。

2、选中此实例,并按F9打开动作面板。输入如下脚本:

on (press) {

this.startDrag(true);//当鼠标按下(press)之后,这个实例(因为我们把脚本写

在实例本身了,所以这里用 this 代替影片剪辑实例的名字)可以被拖拽,使用

命令如上面的命令解释。对于参数的选择方面,这里只填写了锁定到鼠标位置

中央,如果想选不锁定到鼠标位置中央,可以把true改为 false。有兴趣的朋友

可以更改为 false看看。

}

on (release) {

this.stopDrag();//同样道理,当鼠标释放(release)之后,将停止拖拽动作。

}

3、好了,现在让我们按 Ctrl+回车来测试一下吧,你将会看到舞台上的圆

被你的鼠标拖动的效果。

4、OK,通过这个例子我们可以简单的应用拖拽动作了。现在需要把这个

例子继续完成,还记得上面命令讲解中的左,上,右,下四个控制拖动范围的参

数吗?现在来制作具有约束拖动范围的效果。

5、现在在舞台上绘制一个200*100大小的矩形,注意只要边框不要填

充。

6、如果我们希望在拖动的时候这个圆只能在矩形内拖动的话,就要先设置

这个矩形的坐标,并记下矩形四个顶点的坐标(这点很重要!)。OK,比如,现

在此例子中的矩形的四个顶点分别如上图所示。那我们要取的四个参数就应该

是:左=50,上=100,右=250,下=200 现在打开动作面板,修

改刚才的脚本如下:

on (press) {

this.startDrag(true, 50, 100, 250, 200);//这里我们就使用刚才确定好的4个参数。

4个点的参数就对拖动对象实现了一个矩形区域的移动约束!

}

on (release) {

this.stopDrag();

}

7、好了,按Ctrl+回车去测试吧!

好了,关于拖拽的讲解先到这里,下面我们来学习如何结合着拖拽动作来检

测对象之间的碰撞!

三、碰撞命令的讲解

命令格式: 目标影片剪辑的实例.hihkest(被拖拽的实例) 这个是比较

简单的检测碰撞命令

目标影片剪辑的实例.hihkest(被拖拽实例的X轴坐标,被拖

拽实例的Y轴坐标,对象的矩形区域范围还是对象本身范围) 这个是比较复

杂点的检测碰撞命令

命令解释: 以上两个命令都是用来检测碰撞的,可以根据需要选择不同的

命令。重点解释一下对象的矩形区域范围和对象本身范围(上面的命令中,false

表示对象的矩形区域范围,true表示对象本身的范围)

四、碰撞命令与拖拽命令的结合使用

(一)、下面通过简单的例子来学习碰撞命令(我们先来学习如何检测是否

碰到对象的矩形区域范围)

1、新建一个 flash 文档,在舞台上绘制一个圆形。选中圆形并按F8将它

转换为影片剪辑,起名:圆 。这样就在舞台上创建了一个圆的实例。

2、选中此实例,为它起一个名字,此例起名为:yuan

3、选择文字工具,并选择文字类型为“动态文本”,在圆的实例下面拖绘出一个

动态文本框。并起一个变量名为:hk

4、选中时间轴的第一桢,按F9打开动作面板,输入以下脚本:

_root.onEnterFrame = function() {

//这个是在时间轴上的AS编写规则,解释为舞台上每桢都执行下面的脚本

(onEnterFrame)。

if (_root.yuan.hitTest(_root._xmouse, _root._ymouse, false)) {

//根据上面命令的讲解,这个语句就是检测碰撞了。如果鼠标碰到舞台上

yuan这个实例的矩形区域范围的话,就执行下面的脚本。

hk = "接触矩形区域范围";

//动态文本框就显示出“接触矩形区域范围”

} else {

hk = "没有接触到矩形区域范围";

//如果鼠标没有碰到舞台上 yuan 这个实例的矩形区域范围的话,就显示

没有接触到矩形区域范围。

}

};

现在可以按Ctrl+回车去测试我们的成果

(二)、拖拽碰撞检测

现在再来一个例子讲解拖拽碰撞检测, 想偷懒的话可以通过修改上面例子的

代码来学习。

1、现在稍微修改一下上面的例子,以便让我们学习拖拽碰撞检测,在上面

例子的舞台上绘制一个矩形,并把这个矩形转换成电影剪辑,起名为:矩形 。

这样就在舞台上又创建了一个矩形的实例,现在为这个矩形实例起一个名为:

juxing 。

2、选中这个矩形实例,打开动作面板,输入可以拖拽这个实例的脚本。如下:

on (press) {

this.startDrag(true);

}

on (release) {

this.stopDrag();

}

这个脚本就是为了能拖动这个矩形实例。 具体解释请回顾第一个拖动对象例

子的脚本说明。

3、现在来修改脚本,选中时间轴的第一桢,按F9打开动作面板,你将会

看到上个例子的碰撞检测脚本,把它修改为如下脚本:

_root.onEnterFrame = function() {

if (_root.yuan.hitTest(_root.juxing)) {

hk = "碰到了";

} else {

hk = "没有碰到";

}

}

这个脚本和上次的碰撞检测脚本类似,只不过不需要再书写X轴和Y轴,也

不用写是否碰到矩形区域范围。简单吧

现在又到了测试阶段了,去观看你的成果

六、流程控制与循环语句

众所周知,flash中动画依靠的是时间轴,在没有脚本的情况下,动画会依照时

间轴从第一帧不停的播放到最后一帧,然后始重复播放或者干脆停止。为了能更

好的控制动画,就必须使用脚本语句。而要想使动画具有逻辑判断的功能,就要

使用流程控制和循环控制语句了! 下面通过几个简单的小例子来学习流程与循环

控制语句。

一、流程控制语句

所谓流程控制,无非就是我们想控制动画程序的执行顺序而已。我们可以让

flash根据一些特定的条件,来决定要执行哪个程序。这样就好象给了程序一些

判断的机制。

if...else控制语句

根据英文的意思,大家可以简单的理解上面的控制语句:如果...就...否

则...就... 下面来看看这个流程控制语句的书写格式。

if(条件){

//条件成立的话,就执行这里的程序。

}else{

//条件不成立的话就执行这里的程序。

}

下面重点说一下 if 后面括号内的条件。这个条件可以是一个固定的值,也

可以是一个变量或表达式。如果条件成立的话,也就是条件为真(true),就会

执行 if 后面的程序,如果条件不成立,也就是条件为假(false),就会执行

else里的程序。例如:有这么一个条件,A>B 将这个表达式代入if后面的括号

内, 这个流程语句的意思就变成: 如果A>B的话, 就执行第一个大括号内的程序,

如果A不大于B,就将执行else后面大括号内的程序。

实例讲解:

1、新建一个flash文档,在舞台上绘制一个圆,选中圆并按F8转换成影

片剪辑,起名为:圆 这样就在舞台上创建一个圆的实例。

2、选中舞台上的实例,按F9打开动作面板,输入如下脚本:

onClipEvent (enterFrame) {

if (this._x2;

m3_txt = 1 语句 > else if 语句

语法格式:

if(条件 1) {

程序 1;

} else if(条件 2) {

程序 2;

} else if(条件 s) {

程序 (s);

}

功能:else if 语句是这样执行的:进行条件 1 的判断,如果条件 1 为真执行程序 1,如果

条件 1 为假则跳过程序 1,进行条件 2 的判断,其它依此类推。

心心相印

心脏每时每刻都在不停的跳动, 我们利用变量的递增递减及条件语句可以实现这个效果。当

数字增大时心脏变大,当数字减小时心脏变小。

制作步骤:

(1) 新建一个 FLASH 文档,大小默认。

(2) 新建一个名为“跳动的心”的影片剪辑元件,在其编辑区绘制一个心脏。

(3) 把心脏转化为影片剪辑元件,注册点在图形的中心。在属性面板中设置心脏的实例名

为: “heart” 。

(4) 建立一个名为 AS 的层,单击第一帧,打开动作面板,输入下列代码:

var i = 1;

var j = 8;

var con = true;

在 AS 层的第 2 帧插入空白关键帧,在其动作面板中输入下列代码 :

heart._xscale = heart._yscale=i+100;

if (con) {

i++;

} else {

i--;

}

if (i == 1) {

con = true;

} else if (i == j) {

con = false;

}

在 AS 层的第 3 帧插入空白关键帧,在其动作面板中输入下列代码 :

gotoAndPlay(2);

(5) 返回主主场景,把库里的跳动的心提进主场景,可以看到心脏在不停的跳动。

十八、影片剪辑处理函数

在前面我们学习了帧 Script 和按钮 Script,我们注意到帧 Script 的执行是由时间决定

的,如果时间停 止了,则帧 Script 就不会执行了,而按钮则不同,按钮 Script 是基于事

件的,它只和其驱动函数 on(...)中

的事件有关,影片剪辑和按钮一样也支持事件驱动,它的驱动函数为 onClipEvent (...);通常

叫做影片剪辑的事件处理函数,其中的事件分为影片播放(load,enterframe,data 等)和用户反

应(mouseDown,keyDown 等)两类,另外影片剪辑拥有独立的时间轴,其关键帧上也可以加

入帧 Script,所以影片剪辑的控制功能十分强大。

onClipEvent 处理函数

? 脚本位置: 全局函数|影片剪辑控制|onClipEvent 处理函数

? 语法格式:在 FLASH 中使用 onClipEvent 命令来根据影片剪辑的状态触发动作,

onClipEvent 通常使用以下的格式

onClipEvent(事件名称) {

// 程序

}

? 功能:触发为特定影片剪辑实例定义的动作。

? 参数:movieEvent:Object - movieEvent 是一个称为事件的触发器。当事件发生时,执行

该事件后面大括号 ({}) 中的语句。可以为 movieEvent 参数指定下面的任一值:

事件的触发器常见的取值如下: 编写程序时,Flash 会自动提示 onClipEvent ()的事件名称,在一个影片剪辑的“动作”面

板中输入 onClipEvent 时会自动弹出事件列表

Load 事件

load事件在影片剪辑完全加载到内存中时发生。在每次播放 Flash影片时,每个影片剪辑的

load事件只发生一次。

认识 load事件

(1) 在场景中建立一个影片剪辑实例,选中实例,打开“动作”面板,输入下列代码:

onClipEvent (load) {

trace("发生 load事件");

}

(2) 测试影片,在“输出”面板中看到的输出信息只有一次。

(3) 返回主场景,在第二帧插入一帧,测试影片,虽然帧不断循环播放,但输出信息也只

有一次。

(4) 返回主场景,在第二帧插入一空白关键帧,让其循环播放。测试影片,将不断的输出

信息。

说明:通过测试可以看出,当影片剪辑出现在时间轴上时,load事件发生,当实例在时间轴

上消失时又重新出现时,也会发生 load事件。Load 事件通常用来声明初始化变量,当影片

一出现时就会加载这些变量,其它程序就可以调用这些变量。

Unload 事件

Unload 与 load 事件刚好相反,当影片剪辑实例在时间轴在消失时才会发生。

对比 load事件和 unload 事件,在上面实例的基础上,执行下列操作。

(1) 打开影片剪辑的实例面板,把代码改为:

onClipEvent (load) {

trace("发生 load事件");

}

onClipEvent (unload) {

trace("发生 unload事件");

}

(2)移出第二帧上的空白关键帧,在第 20 帧插入帧,第 21 帧插入空白关键帧。第 40

帧插入帧。

测试影片,观看输出信息。间隔地发生 load事件和 unload事件

enterFrame 事件

在主时间轴停止播放时,影片中的影片剪辑并不会停止播放,这个特性决定了影片剪辑的另

一个事件 enterFrame的重要性。enterFrame事件是以影片剪辑帧频不断触发的动作。且触发

的频率与 Flash影片的帧

频一致。enterFrame 事件首先处理与 enterFrame 影片剪辑事件关联的动作,然后才处理附

加到受影响帧的所有动作。

enterFrame 事件其实是一个不断执行的程序,执行的速度取决于帧频。Flash 中默认的帧频

是 12fps,表示播放 12 帧需要一秒的时间,利用这个原理可以制作一个简单的计时器。

enterFrame事件制作计时器

制作:

(1) 在舞台上建立两个动态文本,并在属性面板里设置变量名为: “a_txt” 、 “b_txt” 。

在第 2 帧插入帧

(2) 插“图层 2” ,在此图层上用静态文本输入文字: “简单记时器” ,然后转化为影

片剪辑元件。在第 2 帧插图入关键帧。

(3) 选中此实例,打开“动作”面板,输入下列代码:

onClipEvent (load) {

_root.stop();

var i = 0;

}

//当影片载入时初始变量 i

onClipEvent (enterFrame) {

i++;

//影片进入帧时,程序每执行一次,i 加1

_root.a_txt = i;

//场景中的动态文本显示 i 的值

_root.b_txt = Math.round(i/12*100)/100;

//把 i 除以帧频,使 enterFrame每执行一次得到所需时间,并保留两位数

}

(4)插入“图层 3”在“图层 3”建立三个按钮实例,分别用作“计算” 、 “停止” 、

清除

(5)分别选中两个按钮,打开“动作”面板,输入下列代码:

计算按钮上的代码:

on (press) {

gotoAndStop(2);

}

停止按钮上的代码:

on (press) {

gotoAndStop(1);

}

清除按钮上的代码:

on (press) {

i = 0;

a_txt = "";

b_txt = "";

}

(5)插入“图层 4”在“图层 4“的第1 帧添加代码:

stop();

测试影片。

通过这个实例我们可以看到:enterFrame 事件是以影片剪辑帧频不断触发的动作。且触发

的频率与 Flash影片的帧频一致。

mouseDown 事件:每次移动鼠标时启动此动作。 _xmouse 和_ymouse 属性用于确定当前鼠

标位置。

mouseMove 事件:当按下鼠标左键时启动此动作

mouseUp 事件:释放鼠标左键时启动此动作

对于这三个鼠标响应事件,要与按钮中的鼠标事件区别,前者在影片的任何位置都能触发事

件,后者一定要单击按钮区域才会触发事件。

鼠标行为控制小球

制作步骤:

(1)新建一个影片剪辑“元件 1” ,在其编辑区中给制一个小球,用放射状填充,填充色

为#FBFBFB、#070707,居中对齐,然后把绘制好的小球转换为影片剪辑“元件 2” 。

(2)选中元件 1 中的“元件 2” ,打开动作面板,添加代码:

onClipEvent (load) {

kk = false;

}

onClipEvent (mouseDown) {

kk = true;

}

onClipEvent (mouseUp) {

kk = false;

}

onClipEvent (enterFrame) {

if (kk) {

_x += (this._parent._xmouse+_x)/20;

_y += (this._parent._ymouse+_y)/20;

} else if (kk == false) {

_x += (this._parent._xmouse-_x)/20;

_y += (this._parent._ymouse-_y)/20;

}

}

(3)把“元件”1 提到场景,用任意变形工具把小球的注册点移到垂直下移到小球外,再

用变形面板,设置旋转 60 度,点击复制并应用变形按钮 5 次,复制出 5 个小球,此时 6

个小球排成一排

(4) 在属性面板里分别改变小球的颜色。

(5) 测试影片。鼠标移动,按下,释放观看效果。

制作简单的 Flash涂鸦板

(1) 新建一个影片剪辑元件。返回主场景,打开“库”面板,从“库”面板中拖出影片剪

辑,创建一个空影片剪辑实例。

(2) 选中场景中的空影片剪辑实例,打开“动作”面板,输入下面代码:

onClipEvent (mouseMove) {

if (myDraw) {

_root.lineStyle(5, 0xFF0000, 100);

_root.lineTo(_root._xmouse, _root._ymouse);

}

}

//当鼠标移动时,沿鼠标位置不断画线

onClipEvent (mouseDown) {

myDraw= true;

_root.moveTo(_root._xmouse, _root._ymouse);

}

//鼠标按下时 myDraw为真,并在鼠标位置定义画线的起点

onClipEvent (mouseUp) {

myDraw = false;

}

//当鼠标释放时,myDraw为假,停止画线

(3) 在舞台上创建一个按钮,在按钮上添加代码 :

on (press) {

clear()//删除所画线

}

提示:使用 moveTo()和 lineTo()函数时只需在函数中加入参数,如 moveTo(x1,y1)代

表从点(x1,y1)

处开始画线,lineTo(x2,y2)代表画线的终点是((x2,y2)。使用这两个函数之前必顺先用

lineStyle()函数定

义线的式样。

moveTo()功能:将当前绘画位置移动到 (x, y)。如果缺少任何一个参数,则此方法将失败,

并且当前绘画位

置不改变。您可以通过创建子类来扩展 MovieClip 类的方法和事件处理函数。

lineTo()功能: 使用当前线条样式绘制一条从当前绘画位置到 (x, y) 的线条; 当前绘画

位置随后会设置为 (x,y)。如果正在其中绘制的影片剪辑包含用 Flash 绘画工具创建的内

容,则调用 lineTo() 方法将在该内容下面进行绘制。如果在对 moveTo() 进行任何调用之

前调用了 lineTo(),则当前绘画位置默认为 (0, 0)。如果缺少任何一个参数,则此方法将失

败,并且当前绘画位置不改变。

lineStyle()功能:指定 Flash 用于后续 lineTo() 和 curveTo() 方法调用的线条样式,在以

不同参数调用 lineStyle() 方法之前,线条样式不会改变。可以在绘制路径的中间调用

lineStyle() 以为路径中的不同线段指定不同的样式。

keyDown:当按下某个键时启动此动作。使用 Key.getCode() 获取有关最后按下的键的信息

KeyUp: 当释放某个键时启动此动作。

小结:在 onClipEvent()函数的事件中 load 事件和 enterFrame 事件是最常用,最重要的。

大家一定要

掌握好。在影片剪辑上写命令一定要选加上 onClipEvent()事件处理函数。就如同在按钮

上加命令要先加 on命令。这一点大家一定要牢牢记住。

十九、复制影片剪辑

duplicateMovieClip()函数

duplicateMovieClip()函数的作用是通过复制创建的影片剪辑的实例。在 Flash作品中常见的

倾盆大雨、雪花飘飘、繁星点点等动画特效,就是利用 duplicateMovieClip()函数的功能来

实现的。

脚本位置:全局函数|影片剪辑控制|duplicateMovieClip

语法格式: duplicateMovieclip(目标、新实例名称、深度);

参数意义:

? 目标:target:Object - 要复制的影片剪辑的目标路径。此参数可以是一个字符串(例如

"my_mc"),也可以是对影片剪辑实例的直接引用(例如 my_mc)。能够接受一种以上数据

类型的参数以 Object 类型列出。

? 新实例名称:newname:String- 所复制的影片剪辑的唯一标识符。

? 深度:depth:Number - 所复制的影片剪辑的唯一深度级别。深度级别是所复制的影片剪

辑的堆叠顺序。这种堆叠顺序很像时间轴中图层的堆叠顺序;较低深度级别的影片剪辑隐藏

在较高堆叠顺序的剪辑之下。必须为每个所复制的影片剪辑分配一个唯一的深度级别,以防

止它替换已占用深度上的 SWF 文件。

函数:当 SWF 文件正在播放时,创建一个影片剪辑的实例。无论播放头在原始影片剪辑

中处于什么位置,在重复的影片剪辑中,播放头始终从第 1 帧开始。原始影片剪辑中的变

量不会复制到重复的影片剪辑中。

在使用 duplicateMovieClip()函数时,需要注意以下几点。

(1)复制得到的影片剪辑保持父级影片剪辑原来的所有属性,所以,原来的影片剪辑是静

止的,复制后的影片剪辑也是静止的,并且一个叠放在另一个上。如果不给它们设置不同坐

标,就只能看到编号最大的影片剪辑复本,而看不出复制的效果。

(2)原来的影片剪辑在做补间运动,那么复制品也要做同样的运动,并且无论播放头在原

始影片剪辑(或“父”级)中处于什么位置,复制的影片剪辑播放头始终从第上帧开始。所以,

复制品和原影片剪辑始终有个时间差,因此,即使不给复制得到的影片剪辑实例设置坐标,

也可以看到复制品在运动。

( 3 ) 复制得到的影片剪辑实例经常要与影片剪辑属性控制 ( 特别是

_x,_y,_alpha,_rotation,_xscale,_yscale等属性的控制)结合才能更好地发挥复制效果。

removeMovieClip()函数

通过 duplicateMovieClip()函数产生的实例可以通过removeMovieClip()函数进行删除 。

removeMovieClip()函数的一般形式为:

removeMovieClip(实例名)

复制与删除)

(1) 在舞台上绘制一朵小花,按 F8 键转化为影片剪辑元件。并建立实例名“mc” 。

(2) 插入“图层 2”在此图层的第 1 帧输入代码:

var i=0

在场景中建立两个按钮,(复制按钮和删除按钮)。分别在两个按钮上输入代码:

on (press) {

i++;

if (i=1) {

removeMovieClip("mc"+i);

} else {

i = 1;

}

i--;

}

attachMovie()

脚本位置:ActionScript 2.0 影片|MovieClip

|方法|attachMovie

语法格式: attachMovie(目标, 新实例名, 深度, [对象参数])

说明:这条语句中的四个参数,第四个参数是可选,如果不使用第四个参数,那么它的参数

设置同 duplicateMovieClip()是一样的,但也有一点区别,在 attachMovie()函数中的第一

个参数只能是字符串类型。而 duplicateMovieClip()的第一个参数,可以是一个字符串,也

可以是对影片剪辑实例的直接引用。

attachMovie()语句与 duplicateMovieClip()相比,优点是 attachMovie()复制的“目标”是 库中

要附加到舞台上某影片剪辑的影片剪辑元件的链接名称。 这是在 “链接属性” 对话框中的 “标

识符”字段中输入的名称。

在上例中我们可以这样来什么时候修改

(1) 把舞台上小花实例删除。

(2)打开库,右键单击库中的花实例,在弹出的链接属性对话框中,把作为 Actionscript 导

出选项选中,在标识符栏输入“mc” 。

在复制按钮上把语句改为:

on (press) {

i++;

if (i=600) {

              mytxt.mypic._x = -340;

       }

       if ((mytxt.mypic._alpha)400) {

         _root[j].removeTextField();

      }

   }

};

_root.onKeyDown = function() {

   for (var j in _root) {

      if (_root[j].text == String.fromCharCode(Key.getCode())) {

 

 

         _root[j].text = "PASS";

         _root[j].textColor = 0xFF0000;

         _root[j].borderColor = 0xFF0000;

         _root[j].backgroundColor = 0xFFFF00;

         break;

      }

   }

};

Key.addListener(_root);



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3