PDA 个人数字助理

查看完全版本 : 无双发的一个贴子,我把重要的资料整理了一下


birdonfire
2002-09-23, 09:24 AM
和公司告别,与Flash告别
和公司告别,与Flash告别,下面是我给公司员工做Flash培训写的东东,现在没有用了,发给大家看看,以纪念我的过去的两年
————————————————
第2讲 动作脚本和交互动画

理解几个概念

1. 什么是动作脚本语言(ActionScript)
flash是基于网络的带交互属性的动画,和我们看的普通动画不一样,可以通过鼠标和键盘来和动画“对话”,比如点击按钮播放动画,鼠标拖曳动画图形等等,这些都是通过flash自带的动作脚本语言(ActionScript)实现的。按照Macromedia公司的说法, ActionScript是种基于对象的面对对象脚本语言。ActionScript和JavaScript(一种用于html页面交互的客户端脚本语言)一样采用了ECMA-262语法标准。如果是学过JavaScript,学习ActionScript将很容易。
上面的是一段写在书本上关于ActionScript的文字,大家大概了解一下就可以。没有必要很明白,只要明白ActionScript是用来使动画交互的语言。还有我要说明一下,我这里说的脚本语言和制作课件写的脚本不是一个概念。

2. 面对对象编程思想(OOP )

以前
早期的计算机语言,如FORTRAN、PASCAL、C等被称为过程语言(procedural languages),它们都是按一步一步的方式运行的,程序员将可重用的代码写成函数(functions)。过程语言的标志是函数的运用与数据结构(data structures)是没有联系的。
过程语言工作上一点问题都没有,但是它们也有缺点,一步一步运行的特性使程序员必须知道每一行程序的用途。(试想几十个人合作的程序,每个人都要读懂其他人写的程序,比自己写还要命)同时,它另一大弱点就是函数与数据结构没有关系。

之后
为解决这些问题,有伟大的面向对象(object orientation)概念的出现。
经典的C++、我们熟悉的JacaScript、还有我们更熟悉的ActionScript,都可以用结构函数(constructor functions)定义类(classes),将函数与数据结构联系了起来。(我们不要细究AS到底是面向对象语言,还是“面向符号语言”或“基于对象语言”,OO其实是一种编程的思想,而写AS时确实可以贯彻这个思想(虽然未必能完全彻底地)。关注的重点应该是AS中运用面向对象编程能为我们带来什么样的好处。)
一个构造函数(或称构造器),其实是一套指令用于定义该类的属性(properties)和方法(methods)。有了它你可以创建类的实例(instances),这些实例就称为对象(object)(大家搞清楚了,这时候instances和object就是指同一个东西)
下面再阐述一次最基本的概念:
* 类(Class):你创建的用于定义新的对象的数据类型。创建一个新的类,你需要创建一个构造函数先。
* 构造器(Constructor):用来定义一个类的属性与方法的函数
* 函数(Function)可复用的代码模块,可以通过参数接受数据,自身也可以返回数据
* 标识符(Identifier)用来标识变量、属性、对象、函数或者方法的名字,第一个字符是必须字母、下划线(_),或$。其他字符可以为字母、数字、下划线(_),或$
* 方法(Method):分配到对象上的成员函数。(chocobo:实现某些对对象操作的功能)
* 对象(Object):类的一个实例。每个实例包含构造器定义好的属性和方法,同时它可以包含追加进去的,不是类定义,这个实例特有的属性和方法。
* 属性(Property):定义一个对象的参数

再举个例子,更形象地说明问题。
我们要写构造函数来定义一个叫“鲨鱼”的类,这个类里面包括象“牙齿”、“尺寸”、“形状”、“食欲”等等属性,还包括“游泳”、“进食”和“捕猎”等等方法。
完成了构造函数,我们就有鲨鱼了大致蓝图。要得到一条新的鲨鱼,就创建一个类的实例,每一个实例就是每一条鲨鱼,它们拥有类似的属性(都有牙齿,都有鱼翅),但是它们的属性不一定一样,而且互相没有联系。
每一个对象还可以拥有独立的属性和方法,称为对象的extending。例如某一条鲨鱼它多了一个属性,叫“腿”(天,这举的什么例子啊,怪物~)。只有这条鲨鱼是有腿的,当然,定义鲨鱼的类时不需要这个属性,是后来这个对象里加上的。

在你设计好一个完整的类之后,你就不需要担心它了,你可以当它一个黑箱操作,你发信息进去,里面返回信息,而不需要理会和修改里面的任何内容。接是,你就可以在任何其他程序使用这个类,其他人不需了解该类里面的代码细节,他需要知道和你需写进文档的,只是如何使用它。(这就是OOP重要特性之一:封装性)

你一定想知道以上这些用FLASH是如何实现吧?FLASH内部的编程语言ActionScript,is a full object-oriented language based on ECMAscript.(这句我没翻照写了,XX公司可说明AS是完全的面向对象语言)。ECMAscript是一种脚本语言规范,其中最为大家所知的一种就是JavaScript。

AS里面有很多OO的重要特性,首先,它有很多的内建对象已经可以使用,从MC到XML都是(打开AS面板,NORMAL模式,OBJJECT那一栏就能找到)。其次,AS可以让你扩展对象的属性、方法。最后,AS还可以让你定义新的类。

3.ActionScript语法讲解




实例1怎样制作按狃

知识点:制作按钮,按钮内部的几个影桢的涵义,在按钮内部的影桢上放电影剪辑










实例2 拖曳动作



知识点:按钮函数语句 电影剪辑,面对对象编程思想,对象的实体等等

按钮事件类别

事件类型 函数
鼠标按下 on (press)
鼠标按下后释放 on (release)
鼠标在按钮上滑动 on (rollOver)
鼠标滑出按钮 on (rollOut)
鼠标释放并停在按钮外 on (releaseOutside)
鼠标拖曳并按钮上滑动 on (dragOver)
鼠标拖曳并滑出按钮 on (dragOut)
键盘控制按钮 on (keyPress )







实例3

知识点:简单动画播放控制函数
stop() 停止
play() 播放
gotoAndPlay() 跳到某一桢并播放
gotoAndStop() 跳到某一桢并停止
nextFrame() 跳到下一桢并停止
nextScene() 跳到下一场景并停止
prevFrame() 跳到前一桢并停止
prevScene() 跳到前一场景并停止





实例4 脚本控制物体运动


脚本控制物体运动

脚本控制物体运动
知识: 理解电影剪辑对象,桢循环

电影剪辑(Moive Clip)的属性
_alpha 透明度(0—100)
_height 高
_highquality 显示质量
_name 名称
_rotation 旋转角度
_visible 是否可见
_width 宽
_x x轴方向坐标值
_y y轴方向坐标值




实例5 下雨了



知识点:复制电影剪辑,函数的条件判断
Flash教学资源网站:

www.flashkit.com 顶级的flash教学资源网站,有大量的flash源文件,分类齐全,flash教程。声音/图形资源,是闪客必去的地方。
www.flashshock。com 国外flash设计高手的联盟网站,偏重于flash的网站设计,有经典的flash源文件资源,教程,最大的亮点是收集了大量的flash设计的网站,个个都是名家的经典之作。是设计师激发灵感和学习的乐园。
http://www.actionscripts.org/ flash程序设计资源网站,有源文件和教程

——————————————————————————————————————
优秀纯Flash网站:
http://www.2advanced.net/ 国内闪客尽力效仿的网站,很闪客中是一个优秀网站的典范。

http://www.digitalorganism.com/genesis/ 出色的DNA菜单设计,很高的技术含量,整个动画流畅动敢

http://www.digitalorganism.com/genesis/ Flash设计团队网站,大胆而成功的红的界面的应用,仿视窗界面风格设计,

应用了真实影视/广告动画片段,相信FlashMX的导入视频能力能把这种风格流行。

http://www.nrg.be/ 优秀的形状渐变的处理,大气的,有力量感觉的网站,配合出色的声音效果,已经是超出了普通网页的模式和风格。

http://www.matinee.co.uk/ Flash4时代的网站,出色的三维效果,对早期的web页面设计人员来说是革命性,颠覆了传统设计人员的web设计思维。从此web页面设计师都在尝试用flash。


优秀flash游戏网站:
http://web.tiscali.it/swed/aidroid_rn.html flash游戏网站,出色的界面和可玩性,所有flash游戏设计师看到后到感到黯然失色。
http://www.dpi.nl/site_nl/xtra/game/polar/ flash网络游戏的典范,技术含量很高,与后台语言的结合,对玩家成绩和资料处理,让人感到flash程序设计功能异常强大。


Flash第三方工具软件网站:
http://buraks.com/asv/ 大名鼎鼎的asv(一种针对flash文件的代码解析工具)的官方网站,有asv的帮助文件
http://www.swift3d.com/ Swift3D 的官方网站 这个就不用说了

http://www.vecta3d.com/ 第三方3D工具软件vecta3d的网站

http://www.flaxfx.com/ 第三方文本特效工具flaxfx网站

其他:

http://www.flashforward2002.com 国外flash电影节官方网站








第三讲 ActionScript深入应用



以下是一些概念和原理,是通往flash脚本编程必由之路

1. 面对对象编程(Object-Oriented Programme )

早期的计算机语言,如FORTRAN、BASIC、C等被称为过程语言(procedural languages),运行时都是逐行执行代码的,这样对于大量的代码来说对程序开发人员是个不小的考验——要理解程序代码必须读懂每一行代码。这样对于合作程序开发是一个致命的制约,总不能要求开发小组中的每一个成员从头到尾读懂代码。
后来为了解决这些问题,出现了对面向对象(object orientation)概念。在后来的程序语言中,比如跨平台的Java,经典的C++,网页上实现交互和特效的JavaSript,以及Flash内建的ActionScript都应用了面对对象的思想,都是面对对象程序语言。
面对对象是把所有一类的物体的相关信息组织起来,放在一个称为类(Class)的集合中,类的信息就称为属性(Properties)和方法(Method)。这就好象把“人”称为一个类,“人”是一个抽象的概念,而具体的人是实在存在的,那么每一个具体的人就是“人”这个类的对象,“人”这个类有一些通用的属性和方法,比如人能说话,能够繁衍后代 ,能直立行走。同样FlashMX中,ActionScrip把MoiveClip(电影剪辑),Sound(声音)和Color(色彩)等等归为一类,这些类的实体(Instance)就是对象,这些类,以电影剪辑为例,有一些属性比如_width(宽),_height(高),_visible(是否可视)等等和一些方法,比如attachMoive(从库中绑定电影剪辑),duplicateMoiveClip(复制电影剪辑)等等。对象作为类的实体化(Instancing)就有了该类的属性和方法。改变对象的属性和执行对象方法就是一种基于对象的行为。ActionScript和JavaScript一样都是采用了ECMA_262(欧洲计算机制造协会)的语法标准,
学过JavaScript的人很容易学习ActionScript。



2.基本脚本函数
如果是想让动画播放到某一桢停止,或动作由某一桢跳到另一桢并播放或停止,用什么函数语句控制?使动画播放或停止是常见的动画控制,而用来控制的函数语句也是常用的,为了便于区别,我们把它们归为基本脚本函数。常用的基本脚本函数和功能如表3-4-1:

函数语句 功能
gotoAndStop() 播放磁头到某一影桢并停止
gotoAndPlay() 播放磁头到某一影桢并播放
nextFrame() 跳到下一影桢并停止
nextScene() 跳到下一场景开始播放
Play() 播放
Stop() 停止
prevFrame() 跳到前一影桢并停止
prevScene() 跳到前一场景并播放
stopAllSounds() 停止播放动画中所有声音
表3-4-1基本脚本函数语句
上面函数语句中其中gotoAndStop()和gotoAndPlay()有参数,其他的没有参数,直接写入即可。而gotoAndStop()和gotoAndStop()要参数设置,图3-4-3:


图3-4-3 goto语句的参数设置
两个函数的语法参数设置很相似,以为gotoAndStop()说明:

语法:gotoAndStop( scene ,frame)参数说明:Scene: 跳到某一场景 current scence: 当前场景 next scence: 下一个场景previous scence: 上一个场景Type:目标桢在时间轴上的位置和名称。Frame Number: 目标桢在时间轴的位置 Frame lable : 目标桢的名称 Expression: 通过算术表达式表示目标桢 Next Frame: 跳到下一影桢 Previous Frame: 跳到上一影桢 Frame: 目标桢的位置和名称
基本脚本函数在Flash4以后(包括Flash4)的播放器(Flash Player)都支持,不用考虑函数在播放器中是否能执行的问题。


3。深入理解电影剪辑
在前面的章节中讲过电影剪辑是“小电影”,是动画设计师最常应用的设计元素。而在Flash脚本程序开发人员心目中,电影剪辑是最常用的对象之一,也是唯一图形化的对象。怎么理解呢?Flash脚本程序开发人员是用ActionScript来工作的,ActionScript是基于对象的脚本语言,所以在他们的眼中最精美的电影剪辑首先是一个电影剪辑,然后才是图形。从库中拖出的放置场景中的电影剪辑都是电影剪辑的一个实体(Instance),从库中把电影剪辑拖出的过程就是电影剪辑实体化的过程,在场景中的电影剪辑实体都有一个也是唯一一个标识名(Instance Name),也就是对象的名字。
前面说过,电影剪辑可以相互嵌套,电影剪辑可以包含另一电影剪辑,这就存在一个层次结构的问题。现如果是要使放在电影剪辑甲内部的电影剪辑乙播放,那么就要给电影剪辑乙指定一个路径,这个路径中就要用到电影剪辑的实体名。电影剪辑实体名字在该电影剪辑属性面板中命名即可,如图3-4-4所示,给电影剪辑实体命名为myball。

图3-4-4 给电影剪辑实体命名
4.电影剪辑的路径
电影剪辑对象可以相互嵌套,这就像文件夹内部有另一个文件夹,这个文件夹内才有我们要找的文件,现在这个文件找到了,如果要告诉别人,就最好应该提供一个文件的路径。同样,在Flash中,现在ActionScript要找到嵌套在电影剪辑实体甲内的电影剪辑乙,也需要提供一个路径才可以找到。

5. 电影剪辑的属性
电影剪辑是对象,有自己的属性(Properties)和方法(Method),表3-5-1所示是一些常用的电影剪辑的属性。
表3-5-1 电影剪辑的属性
属性 说明
_alpha 电影剪辑实体的透明度,范围0-100
_currentframe 电影剪辑实体播放时播放磁头所在的影桢
_framesloaded 被载入的电影剪辑实体内部的影桢数,常和_totalframes一起使用
_height 电影剪辑实体的高
_name 电影剪辑实体名
_rotation 电影剪辑实体的角度值,范围为0—360
_target 电影剪辑实体的目标路径
_totalframes 电影剪辑实体内部的影桢,和_totalframes一起用于loading制作
_url 电影剪辑的url值
_visible 电影剪辑实体是否可见,分true和false两个值,true可见,false不可见
_width 电影剪辑实体的宽
_x 电影剪辑实体的x轴坐标值
_xscale 电影剪辑实体与原电影剪辑的x坐标方向的大小比值,范围为0-100
_y 电影剪辑实体的y轴坐标值
_yscale 电影剪辑实体与原电影剪辑的y坐标方向的大小比值,范围为0-100


6.电影剪辑的onClipEvent语句
动作脚本可以捆绑在MoiveClip的外部,也可以加为其内部的影桢上,捆绑在外部必须用到onClipEvent语句。onClipEvent语句是触发型语句,用以检查MoiveClip实体有没有被出发,如果触发的话就执行包含在语句内的代码。和在按牛上捆绑onMouseEvent语句一样,在动作脚本面板的普通模式下提供语句事件的类型参数面板。

图3-5-2onClipEvent语句事件类型参数面板
事件类型 说明
Load 电影剪辑实体载入电影场景后,触发事件
EnterFrame 播放到放置电影剪辑实体所在的影桢时,触发事件,执行onClipEvent内的代码,而不管该电影剪辑实体本身是播放还是停止。
unload 电影剪辑被卸载后,开始出发事件
Mouse down 鼠标按下时触发事件,执行onClipEvent内的代码,主要鼠标按下就触发,不要求是按在电影剪辑上
Mouse up 鼠标释放时触发事件,执行onClipEvent内的代码,主要鼠标释放就触发,不要求是从电影剪辑上释放
Mouse move 鼠标移动时触发事件,执行onClipEvent内的代码
Key down 键盘按下时触发事件,执行onClipEvent内的代码
Key up 键盘按下后释放触发事件,执行onClipEvent内的代码
Data LoadVariable或LoadMoive语句在其他电影剪辑实体上加载数据时,触发事件
从图3-5-2可知道onClipEvent语句事件类型有9种 如表3-5-2所示:
表3-5-2,onClipEvent语句事件类型
















7. 电影剪辑的方法(Method)
电影剪辑有很多属性和方法,表3-6-1列出了一些常用电影剪辑的方法。

表3-6-1电影剪辑的方法
方法(Method) 说明 说明
MovieClip.attachMovie 从库中绑定一个电影剪辑到场景中
MovieClip.createEmptyMovieClip 新建一个空电影剪辑
MovieClip.createTextField 在电影剪辑中创建一文本
MovieClip.duplicateMovieClip 复制电影剪辑实体
MovieClip.getBytesLoaded 获取指定电影剪辑已下载的字节数
MovieClip.getBytesTotal 获取指定电影剪辑全部字节数
MovieClip.getDepth 获取指定电影剪辑的深度
MovieClip.gotoAndPlay 跳到指定电影剪辑内部的影桢并播放
MovieClip.gotoAndStop 跳到指定电影剪辑内部的影桢并停止
MovieClip.hitTest 检测指定的电影剪辑是否和其他电影剪辑和鼠标碰撞
MovieClip.loadMovie 载入电影剪辑
MovieClip.loadVariables 给指定电影剪辑加载外部变量
MovieClip.play 播放指定电影剪辑
MovieClip.removeMovieClip 删除指定电影剪辑
MovieClip.setMask 给指定电影剪辑设置遮罩效果
MovieClip.startDrag 开始拖曳电影剪辑
MovieClip.stop 停止播放指定电影剪辑
MovieClip.stopDrag 停止拖曳电影剪辑
MovieClip.unloadMovie 卸载指定电影剪辑


8. 给动画加点声音






实例1 控制物体运动


实例2抛体运动







实例3 下雨了


实例4 鼠标跟随

5.重力小球


Flash Mx和Flash5事件模式比较

无双
相信不少闪客们注意到macromeidia公司在介绍FlashMX增强的动作脚本(ActionScript)功能时有过这样的说法“new event model”——新的事件模式。这是什么意思?从Flash4到Flash5,在flash的教材和培训中我们第一次用上了动作脚本(actionscript和面对对象(oriented-object)的字眼,相信这也是flash由一个纯粹的动作制作软件演变成一个集成的多媒体开发环境的一个最重要因素,从flash5开始,我们可以随心所欲的用程序代码去控制电影剪辑的运动,做出很多客户端的其他程序语言不敢做的可怕的交互效果。笔者认为这是一件很惬意的事情,但是如果你是一个java或 web页面开发人员,你知道流行的面对对象的编程思想,你在用flash的动作脚本编写程序时可能感到有点的遗憾,你感觉到一个动画制作软件结合面对对象的思想给你变编程带来便利的时候,也感到flash5的actionscript不象java 和javascript那样完全的面对对象,为什么按纽不能是对象呢,还有在javascript中的表单(form)为什么不是对象呢。
Macromedia公司给我们的总是要比我们期望的要多。你现在可以在FashMX中找到答案。我们来看看对象的事件模式到底有什么样的改进。


Flash5的电影剪辑事件
· enterFrame
· load
· unload
· mouseDown
· mouseUp
· mouseMove
· keyDown
· keyUp
· data
电影剪辑作为对象拥有上面这些事件,我们只能把事件方法捆绑在一个电影剪辑对象实体在外部(无双注:不是电影剪辑时间线上的桢上),常用的表达方式:
onClipEvent (event) {
// code
}

Button Events in Flash 5ash 5的按纽事件
· press
· release
· releaseOutside
· rollOver
· rollOut
· dragOver
· dragOut
· keyPress
常用的表达方式
on (event) {
// code
}
在flash5和以前版本中,动作脚本代码只可以捆绑在帧(frame),按钮和电影剪辑上,其中按纽和电影剪辑实践代码只能捆绑在其外部。这就给我们带来一些问题:
· 不能把onClipEvent事件捆绑在电影剪辑自身内部
· 当电影剪辑运行时不能直接改变或删除事件句柄
· 不能从库(lirary)中绑定电影剪辑后,再给这个电影剪辑赋动作脚本
作为一个flash开发人员,这些问题相信不处不在,我们为了通过动作脚本用一个电影剪辑去控制另一个电影剪辑,有时候需要做空白的电影剪辑,这个电影剪辑仅仅是用于包含其他的电影剪辑,于是电影剪辑相互嵌套,父电影剪辑,子电影剪辑,层层关系,让我们感到象一个巨大的迷宫。FlashMX新的时事件模式让我们不再这样呆板的工作。看看FlashMX的事件模式。

FlashMX的事件模式
在FlashMX中,事件句柄仅仅是对象的的一个属性,flash5中的电影剪辑事件变成了电影剪辑对象的一个属性,电影剪辑事件处理可以用流行的点语法表达,比如做电影剪辑实体mc的。onEnterFrame事件的方法。可以是mc.onEnterFrame 。
有一个电影剪辑实体ball,用通过动作脚本让其自由转动,在flash5中可以在这个电影剪辑实体上捆绑下面代码:
// code on "ball" instance
onClipEvent (enterFrame) {
this._rotation += 5;
}
这样当电影剪辑每运行一桢时,有旋转5度。做到了让电影剪辑旋转的目的,但是这样的旋转是无终止的,我们不能通过代码让其在适当的时候停止。
在FlashMX新事件模式中我们可以把代码放在电影剪辑实体内部的桢上,可以捆绑下面代码

// code inside "ball" symbol
this.onEnterFrame = function () {
this._rotation += 5;
};
我们可以在电影剪辑的一桢上捆绑上面代码,而在另一桢上捆绑下面的代码
this.onEnterFrame = function () {
this._rotation -= 5;
};
在第三桢上捆绑下面代码使电影剪辑停止:
this.onEnterFrame = undefined;
再通过外部的脚本使电影剪辑停止在某一桢,这样就可以控制电影奸计是顺时针运动,逆时针运动还是停止运动。
Button and Movie Clip Events in Flash MX
Flash MX中的按纽和电影剪辑事件
让我们感到欣慰的是,在FlashMx中按纽终于作为一个对象来来处理了,和电影剪辑一样,可以从苦库中拖出按纽来创建按纽对象实体,按纽事件也作为对象的属性来处理。下面是点语法表达的按纽事件处理表达方式:
· Button.onDragOut
· Button.onDragOver
· Button.onKeyDown
· Button.onKeyUp
· Button.onKillFocus
· Button.onPress
· Button.onRelease
· Button.onReleaseOutside
· Button.onRollOut
· Button.onRollOver
· Button.onSetFocus

如果你足够细心的话,可以看到按纽增加了新的事件(属性?笔者的观念现在还没有改变过来,注意以后千万叫属性,不叫事件:))))——focus--onSetFocus 和onKillFocus.

下面是全部的电影剪辑事件(属性?)
· MovieClip.onData
· MovieClip.onDragOut
· MovieClip.onDragOver
· MovieClip.onEnterFrame
· MovieClip.onKeyDown
· MovieClip.onKeyUp
· MovieClip.onKillFocus
· MovieClip.onLoad
· MovieClip.onMouseDown
· MovieClip.onMouseMove
· MovieClip.onMouseUp
· MovieClip.onPress
· MovieClip.onRelease
· MovieClip.onReleaseOutside
· MovieClip.onRollOut
· MovieClip.onRollOver
· MovieClip.onSetFocus
· MovieClip.onUnload
同样增加了新的事件句柄onPress 和onRollOver.这有什么用呢?还记得我们在射击等游戏时候怎样去检测目标(电影剪辑)被击中吗?用的是hitTest()方法,现在可以用电影剪辑的onPress,onRelease,onRollOut实现同样的功能。
实例说明



Macromedia Flash Player与Nokia终端设备整合
为Nokia终端媒体用户提供丰富的web内容接入和体验



郝尔辛基—2002年2月6日—Nokia and Marromeida公司(Nasdaq: MACR)今天联合宣称Macromedia Flash Player将被整合到Nokia终端媒体设备,构建一种全新的与数字视频广播(DVB),Internet内容接入,个人视频录音机(PVR)无缝结合的娱乐媒体组合。Nokia多媒体终端机,是Nokia最近设计开发的第一个针对家庭环境的用户设备,它把家庭电视转变为一个多功能的娱乐集成环境,整合了数字电视的所有功能以及把Internet内容接入到家庭娱乐环境。其技术是以开放源代码技术(Open Source Technologies),比如liunx为基础构架。Macromedia 和 Nokia的合作使全球超过一百万的Maromedia Flash 设计师和程序开发人员把他们现有的技术用在Nokia家庭娱乐集成环境的开发中。Macromedia Flash Player 提供最小的基于工业标准优于简单图形,MP3音频的多媒体(Rich Media)环境。为了提高Nokia多媒体终端机性能更好的释放用户的应用体验,Macromedia Flash能乘载广泛的应用体验和服务,包括互动广告,电子导航和个性化的商业服务。 “Nokia多媒体终端家庭娱乐平台能使用户获得和无缝接触周围无处不在的数字信息流。” Nokia多媒体终端产品部总经理Hanno Narjus说,“通过在Nokia多媒体终端机中整合Mzcromeida Flash Player ,用户能充分体验第一位的丰富网络内容,应用和服务。”“应用整合在基于开放标准的Nokia多媒体终端机上的Macromedia Flash Player,Macromedia和Nokia正在帮助开发者和数字媒体提供商用可能的方式制作和传递丰富的内容和应用给终端用户。”Macromedia公司副总裁Peter Meechan说,“Macromedia Flash功能的多样给数字媒体提供商对终端用户传递独特而丰富的交互内容和应用带来一个灵活的方式。”Nokia多媒体终端机目前在瑞典有应用,要知道更多的多媒体终端机的信息,请浏览网站: www.nokia.com/multimedia/mediaterminal.html. 关于 MACROMEDIAMacromedia(www.macromedia.com)使数以百万的设?..易澹琈acromedia 正在引导新一代丰富Internet 应用程序的发展,从根本上改进 Internet 带给用户的体验。关于 NOKIANokia是世界领先的移动电话通讯制造商。本着很强的行业经验,创造力,友好的用户关怀和确保信用解决,成为领先的移动电话和移动,固定和IP网络提供商。通过给Internet带来移动性,为公司创造了新的发展机遇和为人们的日常生活带来全新的活力和体验。

birdonfire
2002-09-23, 09:24 AM
8动作脚本(ActionScript)基础

8.1一个例子—飞碟运动

通过按钮控制静止的飞碟由左向右运动和设定初始位置。同时显示飞碟当前所在的位置

我们来分析动画的原理:分两部分:
1.显示飞碟当前所在位置信息
2控制飞碟的运动。

1. 显示飞碟位置信息

在飞碟电影剪辑内增加两文本框,用于显示飞碟的位置信息(x,y值)设置变量名分别是mx,my
不设定初始值(文本框放在电影剪辑内,在电影剪辑移动时,文本框也跟着移动)
回到主场景,把飞碟电影剪辑从库中拖出,并给实体命名为ufo,在实体上面捆绑以下动作脚本:
onClipEvent (enterFrame) {
_root.ufo.mx = this._x;
_root.ufo.my = this._y;
}
这段脚本是用于显示飞碟的位置x,y值。

2控制飞碟的运动
控制飞碟运动的脚本放在一个动作脚本电影剪辑action_mc里(这个电影剪辑只捆绑有动作脚本,没有其他的元件和图文)。如下图:

给影桢赋以下动作脚本:
第一桢:
move_x = 10;
stop ();
第二桢:
x = _root.ufo._x;
第五桢:
setProperty ("_root.ufo", _x, x+move_x);
gotoAndPlay (2);
以上脚本是使飞碟移动的。下面我们把这个电影剪辑里的脚本语言和按钮事件连通起来。
在做好的按钮play上捆绑下面动作,当按下按钮时,执行电影剪辑action_mc上的脚本
on (press) {
with (_root.action_mc) {
gotoAndPlay (2);
}
}
在按钮reset上捆绑下面动作脚本:
on (press) {
_root.action_mc.gotoAndStop (1);
setProperty ("_root.ufo", _x, 38);
setProperty ("_root.ufo", _y, 42.7);
}
这样通过按钮事件(按下,释放等)执行捆绑在按钮上面的动作脚本,这段动作脚本又与电影剪辑action_mv关联,便执行action_mc上面的脚本语言,而action_mc上的脚本语言又控制着电影剪辑飞碟的运动。这样通过按钮控制飞碟的运动便完成。

动作脚本控制流程图
看到这里,如果你是一个初学者,你可能不是很明白。可能会有很多疑问(不过最好不要问我怎样绘图,怎样做按钮、电影剪辑哦)
1.动作脚本语言的语法规则
2.在哪些载体上捆绑电影剪辑
3.给按钮和电影剪辑捆绑动作有什么区别
等等,不过,没有关系,这个例子只是给你一个关于flash编程的感性认识。在下面的章节中要详细说明。

8.2动作脚本(ActionScript)基本语法
  任何脚本语言都有自己的语法规则和标点符号,这些规则规定了字符和字如何用来创建语句,又将以怎样的顺序来编写程序。比如在英语中句点用来表示一个单词的结束,而在Flash5的Action中用分号(来表示一条语句的结束。
一、 点语法
Flash5引如点语法的概念同时也是应用了面对对象编程的思想,如果你对任何面向对象语言熟悉,比如C语言,Java和JavaScript,那么一定体会到点语法给编程带来的极大方便。点语法是Flash5中最深得人心的语法规则,在ActionScript中点“.”可以指出对象或者电影剪辑的属性或方法,用于标枳电影剪辑或变量的目标路径,一个点语法表达式以对象或者电影剪辑实体的名字开始,后面跟着一个点,以属性、方法或者变量来结束。例如上例中要显示飞碟电影剪辑位置,表达式_root.ufo.mx = this._x;把电影剪辑的x坐标值赋值给电影剪辑飞碟的变量mx。
还可以在影片夹子后面跟住相应方法(关于在以后的章节中说明)来指示相对应的电影剪辑做相应的操作。比如:

myclip.gotoAndStop (1);
_root.myclip.Play()

这两句可以分别表示电影剪辑实体myclip停止在第一桢和播放。点语法可以提供相对路径和绝对路径,这和HTML语言的链接路径可以是相对路径和绝对路径一样。在绝对路径中,用_root来表示时间轴,_root.myclip表示指向主场景(主时间轴)内的电影剪辑myclip.在相对路径中,_parent表示返回上一级路径,比如_parent.myclip表示目标指向嵌套电影剪辑myclip的父电影剪辑,_parent.myclip.Play()表示播放嵌套电影剪辑myclip的父电影剪辑。你可以根据你的使用习惯在点语法中用相对路径还是绝对路径,但有一点必须注意的是:如果你把捆绑了动作脚本的电影剪辑的嵌套关系改变了,而你用的又是绝对路径的点语法,那么点语法不能正确的标枳目标路径,那么最好用相对路径的点语法。使用相对路径的点语法不会由于电影歼剪辑的嵌套关系改变而找不到目标路径。
 二、斜杠语法
  斜杠语法是以前Flash3和Flash4沿用的语法,目的和Flash5的点语法的目的一样,指出电影剪辑或者变量的目标路径。在Flash5中为了向下兼容,这个语法仍然得到支持,但不荐使用这个语法。在斜杠语法中斜杠被用来代替前面所说的点来指示出影片夹子或变量的路径,如果按这种格式来书写变量路径的话还需在变量前加上一个冒号(,比如:   
myMovieClip/childMovieClip:myVariable
  而同样的用点语法来写的要简单明了得多:
 myMovieClip.childMovieClip.myVariable
   斜杠语法也支持路径的相对路径与绝对路径。
三、大括号

 ActionScript代码中可以用大括号({})把一段代码括起来,形成语句块,组成一个代码段来完成一个相对完整的功能,这种代码一般来说是处于子程序、函数或者功能组之中。对于一些特定的操作比如响应鼠标事件、调用电影剪辑,或者循环语句等等。
比如上例中捆绑在按钮上用于调用电影剪辑action_mc的动作脚本:
on (press) {
with (_root.action_mc) {
gotoAndPlay (2);
}
}
当激发鼠标事件(按下,释放等等)时,便执行大括号里的语句块
  四、分号
Flash5中分号(表示一个句子的结束,每一条语句都是由分号来结束的,比如:
_root.action_mc.gotoAndStop (1);
setProperty ("_root.ufo", _x, 38);
但是如果你自己手写代码中如果在结束时忘记加上分号了也没有关系,因为编译程序会自动帮你加上。
  五、圆括号
  当你使用函数,或者在函数调用要传送一些参数时需使用圆括号。比如:
Function mycharacter (name,sex,age) {
  ……
}
在这里如果你要调用这个函数就要把它的参数写进括号中:
mycharacter ("xusijun","male",24);
在其它的命令与操作中还有些命令要求你用圆括号,比如电影剪辑复制事件duplicateMovieClip ( ),for循环和一些条件判断语句等。
  你也可以使用大括号来的方式使用点语法在点的左边来计算一个表达式,比如下面的状态就是创建并产生一个新的颜色对象。
onClipEvent(load) {
(new Color(this)).setRGB(0xffff00));
}
  如果你不使用大括号语法你就必需写多一个代码段来实现它:
onClipEvent(load) {
myColor = new Color(this);
myColor.setRGB(0xffff00);
}

  六、大小写字符
  在ActionScript中只有关键字是区分大小写的,变量和字符串等可以按习惯用小小写字符,比如下面的代码是等价的
tree.height = true;
Tree.height = true;
但是养成一个有章可循的大小写书写习惯会使你受益非浅。和其他程序语言一样,ActionScript语言也有自身的保留字(关键字),保留字对大小写是敏感的,关键字没有正确的使用大小写,代码将会出错,如果编程面板中的语法加亮功能打开的话,正确的关键字代码应该是蓝色。下面便是系统常用的关键字,你在给变量取名时不能用这些关键字来做为你自己的变量。
break for new var
continue function return void
delete if this while
else in typeof with
当然,Flash的关键字远不止这些,具体的可以查Flash5自己带的参考手册。
  七、注释
  在Flash5中为了增加代码的易读性,使用注释语句comment来给程序注释说明信息,给程序加上注释是个很到的习惯。这样即方便了你也方便了别人。在Actions中,你可以使用双斜杠(//)来表示注释,
on(release) {
// 创建一个新的Date对象
myDate = new Date();
currentMonth = myDate.getMonth();
// 将月数转换为月名
year = myDate.getFullYear();
currentDate = myDate.geteDate();
}
  在专家模式(expert mode)时你甚至可以写成/*……*/嵌套的方式,这种方式可以一下子对很多行进行注释。然后程序在执行前会把它转换成一般模式(normal mode),此时注释便会自动转换成(//)形式。
  八、常量
Action中有些内容是固定不变的,你可以在编程时引用它,比如一些常用的按键的键值,再比如布尔变更中的true和false等。
8.3
Actionscript的数据类型  
数据类型是指描述变量或动作脚本元素的信息类型。有两种数据类型:基本数据类型和引用数据类型。字符串、数值和布尔属于基本数据类型,它们有一个固定不变的值,能够保存其所要表示的元素的实际值。电影剪辑、对象、数组属于引用数据类型,它们的值可以变化,是对元素实际值的引用。
关于各种数据类型,在下面做详细的说明。
字符串
字符串是由字母、数字和标点符号组成的字符序列,中文汉字也可以作为字符串,字符串被双引号(““)或单引号(‘‘)封装。双引号(““)或单引号(‘‘)只能是相应出现.比如下面的是字符串:
“Mystring”,‘flash5’,‘土鳖’
我们可以用“+“操作符连接合并字符串,字符串中的空格也做为字符保留。
Mystring=‘flash5’+‘ 土鳖’
得到的字符串Mystring为“flash5 土鳖”
和fLash5中关键字一样字符串是区分大小写的,但是对于变量,电影剪辑实体名,和影桢标枳名是不区分大小写的,这一点一定要记住。
由于字符串是以单或双引号作为起始和结束标志的,因此要在字符串中包括单或双引号或者要字符,需要在单或双引号的前面加上一个反斜线字符(/)称为转义字符,反斜线字符(/)并不显示出来,只是和其它字母结合提供一定的功能,比如要在字符中包含单引号,由于字符是用单引号和双引号封装的,所以字符中的单引号必定会影响字符串的表达,我们在单引号前加反斜线字符(\),就可成功的加入单引号而不影响字符串的表达。
比如:
‘myname is'土鳖'’
还有其他一些字符被用于转义,如下表;
转移序列 转义含义
\b 退格符(ASCII 8)
\f 换页符(ASCII 12)
\n 换行符(ASCII 10)
\r 回车符(ASCII 13)
\t 制表符(ASCII 9)
\" 双引号
' 单引号
\\ 反斜杠
\000 - \377 单字节八进制数
\x00 - \xFF 单字节十六进制数
\u0000 - \uFFFF 双字节十六进制数

2. 数字(Number)
数字是一个双精度浮点型数,可以是整数、小数、正数或负数。我们可以用算术操作符,预定义的数字对象的方法来操作数字。
下面是常用的算术操作符。
操作 操作名称
+ 加
- 减
* 乘
/ 除
% 取模运算
++ 自加
-- 自减
3. 布尔值(Boolean)
布尔值只有两个,true(真)和flase(假),为了和其他的程序语言习惯相同,有时候也用1和0替代,1替代true,0替代false.. 布尔值经常用在条件判断语句中,比如下面代码中的变量userName和password的值都为ture时,才播放电影剪辑。
onClipEvent(enterFrame) {
if ((userName == true) && (password == true)){
play();
}
}

4. 对象(Object)。
对象是相关属性的集合。比如把时间和日期相关的属性的集合定义为Date对象,把和颜色属性相关的集合定义为Color对象。对象都有自身的属性和方法。一般程序语言都有预定义对象和自定义对象两种,程序语言把那些常用的约定速成的属性的集合内建为预定义的对象类型。Flash5脚本语言内集了15中预定义对象类型,它们是:
Array(数组)、boolean(布尔)、Color(颜色)、Date(时间和日期)、Key(键盘)、Math(数学函数)、Mouse(鼠标)、Moiveclip(电影剪辑)、Number(数字)、Object(物件)、Slecetion(选择区)、
Sound(声音)、String(字符串)、XML(可扩展标记语言)、XMLSocket(XML接口)。
当然,仅有Flash5中自建的预定义对象类型是不够的,我们还可以创建自己的对象——自定义对象,定义自定义对象是为我们编程工作的。比如我们要做一个Flash聊天室,要管理当前聊天室成员的信息,一个成员进如聊天室时,记录该成员的性别,年龄和以前是否有聊天记录等等相关属性,我们把这些相关的属性集合在一个对象里。同时定义对象的属性和方法,那么,任何一个成员进入聊天室,程序就调用这段代码,执行相关的方法,这样就减了代码的重复。
  要引用对象的属性和方法,用点语法来表达,比如
mydesk.high=100
myclip.Stop( )

一个对象也可以引用另一个对象类型,实行对象的嵌套。比如
myclip.childclip.endclip..Play( )
在上面的代码中,myclip对象包含childclip对象,childclip对象又包含endclip对象,最终给endclip对象引用播放方法。
电影剪辑(Movclip)
关于电影剪辑,flash5实在是给它赋予了太多的意义,在Flash4中电影剪辑仅仅是当作元件来处理的,Flash5把电影剪辑作为对象类型,是配合面对对象编程的一个重大进步。电影剪辑是唯一一个用图形描述的对象,在flash中大量的应用。和所有对象一样,电影剪辑有自己的属性和方法。电影剪辑可以实体化,从库(libaray)中拖出电影剪辑的过程,也是实体化电影剪辑对象的过程。

变量的命名规则
和其它程序语言一样,Actionscript中也有变量,,Actionscript的变量命名规则和其它语言大同小异。
变量的命名规则:
1.以字母和下划线开头,其它可以包括数字、字母、下划线等等
2.变量能和语言的关键字相冲突,不能以关键字来命名变量
3.在自身的作用域内是唯一的。
比如下面的变量是非法的:
3clip(数字开头)、 this(和关键字冲突)、&hot(特殊字符开头)

给变量赋值
在给变量赋值时,没有必要规定变量的类型,比如没有必要规定变量是以字符串还数字保存的,在程序执行时,根据具体情况变量类型自动的转化。比如下面语句:
myname=“xusijun”
age=24
newvariables= myname+age
在运算时变量age自动将其数字类型转化为字符串类型,结果得到变量值为字符串“xusijun24”

变量的作用域
根据变量的有效作用范围的不同,将变量分为全局变量和局部变量。作用域是指一个变量的有效作用区域,我们可以定义一个变量,它可以在整个程序语言中通用的
也可以是仅仅在一段代码块有效,局部变量通常定义在“{}”内的程序语句块中。
定义局部变量可以有
效的避免变量冲突 ,在整个程序语句中,只有一个同名的全局变量,在语句块中局部变量也是唯一的,但一个语句块中的变量可以和另一个语句块中的变量名是可以相同的,只要它们的作用区域不相冲突就可以。
在Flash中,局部变量用关键字var申明,在局部变量名前有var说明是局部变量。全局变量直接定义。

Flash操作符和表达式

程序语句是由操作数和操作符组合成的。按运算符的功能,将表达式分成以下六类:
1.算术运算符
2.字符串运算符
3.比较运算符
4.逻辑运算符
5.位操作符
6.相等和赋值运算符

1. 算术运算符号
算术运算符号包括+(加)、—(减)、*(乘)、/(除)和%(取模)等等。算术表达式的运算结果为数值。

             算术运算符号
————————————————————————————————————
运算符                   功能
 +                    加
 -                    减
                      乘
 /                    除
 %                    取模
 ++                   自增
 ——                   自减
 **                   平方
—————————————————————————————————————
在Flash5中新增加了一些新的运算符号,比如三角函数sin、cos,不过在执行时候是作为数学对象的方法来运算的,比Math.sin( ).我们将在关于自定义对象的章节中说明。

字符运算符
字符运算符主要是字符合并运算符,在Flash5中用“add”或“+”来合并字符,比如下面一段复制电影剪辑的代码:
  onClipEvent (enterFrame) {
  i++;
   duplicateMovieClip (_root.mybook, “mybook”+i, i);
   setProperty (“_root.mybook” add i, _xscale, 100);
}
当字符和数字结合运算时,数字自动转化了字符,得到字符串。
——————————————————————————————————
表达式                 运算结果           
——————————————————————————————————
“mybook”+i“               “mybook1”(当i=1时)
“_root.mybook” add i,            “_root.mybook2”(当i=2时)
“mystring”+3             “mystring3” 
——————————————————————————————————


比较运算符
比较运算符比较表达的值并返回布尔值(true和false),比较表达式常用在条件判断语句中,如果返回的值是真(true)就执行下面语句块中的代码,如果返回值是假(false)就跳到另一段代码。
                比较操作符
——————————————————————————————————
操作符                  执行运算
< 小于
>                     大于
<=                    大于等于 
>=                    小于等于
——————————————————————————————————
 
 逻辑运算符
逻辑运算符比较布尔值并返回布尔值(true和false),注意和比较操作符的区别。
      逻辑运算符
————————————————————————————————————
     运算符号              执行运算
&& 逻辑与
      II 逻辑“或”
      !                逻辑非          
————————————————————————————————————
  逻辑运算符执行结果
_________________________________________________________________________
A  B       A&&B AIIB !A !B
_________________________________________________________________________
真  真  真        真      假      假
真  假        假        真      假      真
假  真 假        真      真      假
假  假        假  假      真      真  
————————————————————————————————————
位运算符
————————————————————————————————————
运算符       运算符意义     
=    赋值
+= 作假后再赋值
-= 减之后再赋值(x+=test相当于x=x+test)
*= 乘之后再赋值(x*=10相当于x=x*10)
%= 取模之后再赋值(原理同上)
/= 除之后再赋值(原理同上)
<<= 位左移然后赋值(原理同上)
>>= 位右移然后赋值(原理同上)
>>>= 位右移多出部分补零然后赋值(原理同上)
^= 位异或运算后赋值(原理同上)
|= 位或运算后赋值(原理同上)
&= 位与运算后赋值(原理同上)
————————————————————————————————————————

相等和赋值运算符




点和方括弧[]运算符
大家现在都知道点语法,在点语法中点(.)是一个运算符号,点把对象的属性,变量和方法结合起来,标枳了对象的属性、变量和方法的目标路径。方括弧[]运算符可以模拟多为维数组。

给对象创建实体

Actionscript内建了14个预定义对象。理论上我们都可以用关键字new来创建对象的实体,但一般只对对象Array(数组)、Boolean(布尔)、Color(颜色)、Date(时间和日期)、Number(数字)、Objece(目标)、Sound(声音)、String(字符串)、XML(可扩展标记语言)、XMLSocket(XML接口)用new来创建对象的实体。比如:
localtime=new Date( )
localtime.getDate() 
上面代码创建了Date对象的一个实体localtime。然后调用对象实体的方法getDate( ).
电影剪辑是唯一图形化的对象类型,电影剪辑对象的实体化可以看作是这样的一个过程:把电影剪辑从库中拖到场景的过程,拖到场景中的电影剪辑就实体化了,电影剪辑可以无限制地拖到场景中(无限制的实体化),而且不会明显的增加电影文件的体积。
  对于数学(Math),不用关键字new实体化,数学对象包含一些常用的方法,比如sin()、cos()、abs()等等,可以通过下面方式调用:
Math.sin(c)

在普通模式下给对象创建实体
1.选择SetVaribles项
2在变量名(varible)文本框中输入变量名字
在值(Value)文本框中加入关键字new(注意大小写),输入要创建对象的类型,比如Array。并勾选表达式选项(Expression),使为表达式形式(不带引号),得到下面表达式:

  myarray=new Array( )


在专家模式中只要把上面的代码输入就可以。

使用和定义函数
函数是程序语句中的定义的可以重复使用的语句块,这些语句块可以看作一个“黑盒子”,
只要把数值传递给它的参数,便执行其运算功能,函数再把运算的值返回。在ActionScript中,和对象一样,有预定义和自定义函数两种。
可以从时间轴(包括已载入的电影剪辑)调用任一时间轴内的函数。 每个函数都有它自己的特点,有些函数则要求传递参数。如果传递的参数多于函数所要求的个数,多余的值被忽略。如果没有传递要求的参数,空参数被赋给undefined(未定义)数据类型,在导出脚本时就会发生错误。必须在播放头已到达的帧中调用函数。
ActionScript中预定义函数:


Boolean getTimer isFinite newline scroll
escape getVersion isNaN number String
eval 、 globalToLocal keycode parseFloat targetPath
false hitTest localToGlobal parseInt true
getProperty int maxscroll random unescape







自定义函数的调用
在两中模式(普通模式和专家模式)中都可以调用预定义函数。
1. 普通模式
鼠标指向Functions(函数)选项,然后选中要调用的函数,双击选项,函数便调入动作脚本编辑窗口,如果有参数,可以在参数输入区设定参数。
   

专家模式
专家模式自定义函数调入和普通模式基本一样,不同的是在专家模式中只能自己手动的输入参数。

创建自定义函数
Flash5的ActionScript可以创建自定义函数,创建的自定义的函数和预定义函数有同样的功能。如果要用一段代码块语句执行某个功能,而这段代码在程序运行时要多次重复运行,那么可以把这段代码块定义为自定义函数,把代码块封装起来。要运行时只要传递参数给自定义函数,自定义函数运行后把值返回,这样即减少了代码的重复又增加了代码的条理性。
一个自定义函数被创建后,便可以被捆绑在影桢、按钮、电影剪辑上的动作脚本中调用。
和预定义函数不同,自定义函数必须先定义,再调用,顺序不能弄错。

和变量一样,当一个、定义好的函数被重新定义时候,新定义的函数将取代旧的函数
用关键字funion 创建自定义函数,形式为:
function 函数名(参数1,参数2…)
.比如下面语句,自定义一个名字为Circle的函数,函数有一个参数radius:
function Circle(radius){
this.radius=radius;
this.area=Math.PI*radius.radius;
}

  也可以通过创建函数常量来定义函数。函数常量是指在表达式中而不是在语句中声明的不命名的函数。可以用函数常量定义函数,返回它的值,把它赋给表达式中的变量,如下所示:

area = (function () {return Math.PI * radius *radius;})(5);

二、给函数传递参数
 在函数运算时要传递参数。nitials和finalScore :

function fillOutScorecard(initials, finalScore) {
scorecard.display = initials;
scorecard.score = finalScore;
}
  当这个函数被调用时,必须把它要求的参数传递给它。该函数用传递过来的值取代函数定义中的参数。在本例中,scorecard是一个电影剪辑的实例名;display和score是实例中的输入文本域。下面的函数调用把值"JEB"赋给变量display ,把值45000赋给变量score :

fillOutScorecard("JEB", 45000);
  函数fillOutScorecard中的参数initials类似于局部变量。该函数被调用时它存在,退出函数时它消失。如果调用函数时省略了参数,省略了的参数以undefined传递。如果在调用函数时提供了函数定义中并不要求的多余参数,这些多余的参数被忽略。

三、自定义函数:
根据笔者的经验,下面一些函数在我们编程时经常用到,它们是

1.1场景、影桢、关键桢和图层
1.1.1场景
很都人把flash动画叫做flash电影,这是很有道理的,flash至少在两方面借鉴了电影的概念:一是动态原理:电影是以1/12的速率逐个播放电影胶片形成动态画面的,flash也是逐个播放图层中桢的图形形成动画的。不同是在flash中同一桢中的图形放在不同的的电影图层里。二是场景概念,任何电影都是在一定的角色场景中完成的,在一部电影中有多个场景,同样在flash中也有场景(sence)概念,任何动画都是在场景中完成的,在flash中也可以有多个电影场景,如果是个较大的作品,我们可以把动画分在几个场景中做,在播放是按场景的先后顺序依次连续播放。如下图,在很多flash作品都有时髦的预载动画,可以完成主场景动画后,在主场景前mian加一预载场景preloader。

图2—1 图2—2
操作步骤:
1。打开场景面板。点击“窗口”(windows)菜单选项,选择“面板”(panels)选项,选择“场景”(sence)选项,便弹出场景面板。如下图形:

图2—3
2.添加场景并给场景命名。点击右下角 ,添加一场景,缺省名为“场景2”,双击场景图标 ,出现一文字方框,输入:preloader ,命名后的面板如下图:

图2—4

要说明的是:在动画播放时,场景是以先后顺序连续播放的,这个类子既是先播放场景preloading,然后接着播放场景main。我们还可以通过拖动场景图标,改变顺序,便可以改变场景的播放顺序。点击 是复制场景,点击 是删除场景,通过场景面板可以很好的管理场景。

1.1. 2影桢和关键桢
在播放在电影时,有时候要知道播放在哪里,我们可以说电影播放到哪个胶片,在flash中动画播放的多少可以以播放的影桢(Frame)来表示,影桢有普通桢(Frame)、关键桢( Key Frame)空白关键桢(Blank KeyFrame)几种类型,关键桢是指在这样的桢里的图形内容和前后的图形内容不同,起到动画播放中关键的作用,比如在移动渐变(Motion Tween)和形状渐变(Shape Tween)前后两桢就是关键桢。
我们可以增加图层中影桢的个数来增长动画播放的时间,可以拖动该图层中最号一桢,拖长桢的数目。还可以任意一桢(注意但实际上只有前后两桢能够单独选中,选中其他普通桢只能选种全部,如下图

图2—5 图2—6

然后按F5快捷键,影桢便会成倍的增加,图2—5的影桢增加一个,图2—6的影桢一次增加25个。
要增加关键桢,




经验和总结:
在创作作品时,为了提高工作焦虑,要习惯使用快捷键。在处理影侦时,可以用到以下快捷:
增加影桢:F5
删除影桢:Shift+F5
增加关键桢:F6
增加空白关键桢:;F7。
我们还可以设置自己习惯使用的快捷键方案,关于怎样设置快捷键,以后有专门的说明。

1.1.3,图层
在前一节中已经提到土层,土层其实只有两个作用:
1.把同一桢上的图形分不同的层次放置,以便条理清楚,层次分明,比如,我们可以把作为渐变的一些桢放在一个单独的土层里,不受别的图层中的内容影响,能够更好的做渐变效果。在给动画加动作脚本时,为了条理清楚,一般把动做脚本写在一个专门的图层里。
2.由于图层有这样的现象,在上面图层中的内容能够遮住下面的内容,学过photoshop的人很容易理解着这一点:层相互跌加,上面层的内容能遮住下面层的内容,土层的跌加不会影响图形的最终效果。
还有一些特殊的图层:遮罩层和导引层。在做遮罩效果时,必须至少必须两个图层,一个图层是遮罩层,起遮罩作用,遮罩层上的图形本身不显示出来。导引层是给下面层的内容提供一个路径导引作用,导引层上的图形本身不显示出来。图2—5有场景中有两个图层。增加图层的方法是:点击图层下的增加图层图标 ,图层便增加,点击中间的 可以增加导引层,点击 可以删除被选中的图层。

如何给图层命名?给图层命名有必要吗?答案是肯定的,给图层命名一个反映其特征的名字可以增加作品的条理性,当你过一段时间再来整理你的作品或给别人看时,可能不知所云。
左键双击图层头的中间部分。如下图所示(注意不是图层图标)出现一文字框,可以输入图层的名称。



双击图层图标,弹出图层属性面板,可以设定图层的名称,是否被锁定,是普通图层、遮罩/被遮罩、导引/被导引和轮毂色彩等属性。


我们还可以像在场景面板中拖动场景的顺序一样拖动图层的顺序,排在上面的图层其所在的图形也在其他图层的图形上面。

1. 2时间轴和播放头



1.3 属性面板
当初macronmedia摧出Flash5版本时,很都用过Flash4用户对Flash5的“面板“风格的截面很不习惯,flash5把各种属性基本上集成在相应的属性面板上,作者刚接触Flash5时也感到非常的不习惯,要做一个线性的渐变色填充效果,却不知道怎样做——找不到填充工具。但是经过一段时间熟悉后,觉得macromedia这样做很有道理,更加体现了macromedia
产品清新易用风格,你会感到条理非常的清楚,要使用一个工具或设置某一属性,只要找到相应的属性面板就可以,如果你现在还是一个flash4用户,强烈要求你赶快升级你的软件到flash5版本,相信你一定会体验到flash5带来的强大功能和清新的风格。

名称 英文关键名 作用
_______________________________________________________________________________
信息面板   Info 选定对象的宽、高、中心坐标位置、 选中颜色RGB值和鼠标位置
填充面板 Fill 填充图形或文字的颜色,包括基本色、渐变递增、圆形递增和位图填充
描边面板 Stroke 定义图像的描边类型,包括直线、虚线、线条粗细和颜色
变更面板 Transform 按比例缩放文字和图象的高度和宽度和设置旋转角度
对齐面板  Align 对图形进行各种排列,调整间距离
调色板面板  Mixer  定义图像的RGB,HSB,HEX值,提供图形的透明(Alpha)功能设置 样品面板 Swatches 管理图像的颜色以及渐变填充
字符面板 Character 编辑字体大小,颜色,字距,行距以及基线移位
段落面板 Paragraph 设置文字段落的对齐,缩进和间距
文本选项面板 Textoptions 设置动态,静态文本和文本表单域的参数
实体面板 Instance 编辑检查动画的元件和实体
特效面板 Effect 提供元件的亮度(Brightness),颜色(Tint)和透明(Alpha)等特效
帧面板 Frame 动画中的场景影桢进行命名和管理,包括移动渐变和形状渐变。
声音面板 Sound 编辑声音,设置音效以及声音的循环
场景面板 Scene
.增加场景,给场景命名和场景的次序排列
_______________________________________________________________________________

打开属性面板的方法:
1点击窗口上方的“窗口”(window)菜单,选择“面板”选项,弹出如下菜单:

选择对应的面板选项,就可以弹出属性面板。
2点击窗口右下角的快速启动面板上的快捷图标
——————————————————————————————————
显示信息面板
显示调色板面板
显示字符面板
显示实体面板
显示影片浏览器面板
显示动作脚本面板
显示库面板
———————————————————————————————————
3.快捷键 ,如表所示。


1.4元件( symbol)
1.4 .1元件的概念:
能否学好flash是要看是否能很好的理解元件( symbol,由于翻译的不同,在一些书中也叫符号)。大家都知道房子只要是由砖快,门窗,水泥等材料做成的,同样任何一个flash作品都是由元件的图形(garphic)、按钮(button)和电影剪辑组合而成的,和砖块可以重复利用一样,在fllash中元件也可以重复利用。砖块,门窗和水泥对房子来说均有其专门的作用,同样,图形-按钮和电影剪辑也有自身的特性。图形是组合flash动画的最基本的元素,图形和我们在在flash和其他绘图软件中所画的图形不同,图形是群组化的图片,我们可以给图形设置透明值(Alpha),可以在后台(相对于主场景)中编辑图形。

按钮是一个特殊的元件,它提供了交互,我们可以在按钮上捆绑动作脚本(actionscript)
控制其他元件或时间轴的播放头。按钮是要鼠标去激发,鼠标一般有三种状态:鼠标不在按钮激发区域的状态既是一般状态,也做up状态,鼠标悬停在激发区域的状态即悬停状态:也叫
Over状态,按纽被鼠标按下的状态即点击状态,也叫Down状态。在按钮的场景的图层中一般有四个特殊的桢,即是下图形所示的Up,Over,Down和Hit,前三桢内的图形分别就是三个状态显示图形,当然没一桢内的内容放在不同的图层里。第四桢Hit有什么用呢?
刚才提到一个按钮激发区域的概念,Hit桢就是提供按钮一个激发区域的,,在hit桢内的图形所占的区域就是按钮的激发区域。Hit内的图形并不显示出来,它仅仅是起到一个这样的作用:提供一个按钮的激发区域。这和遮罩的原理很相似,本身不做图形显示,只是提供一个特殊的区域。可以在按钮的三个状态中放置图形和电影剪辑元件,以达到很好的视觉效果。



电影剪辑(Moive Clip)是Flash的角色灵魂。Flash5比FLash4突破的提高是引入了面像对象编程的面象对象思想,把电影剪辑作为一种数据类型。电影剪辑是唯一的图形数据类型,大家现在可能还不是很清楚,在我们用动作脚本编程时可能会有进一步的理解。电影剪辑有自己的不依赖主场景的时间诸独立播放的时间诸,可以做为一部的独立的电影播放。也就是在一段动画里,有一段小电影动画,它是自行播放的,不受主场景的时间主的播放头的影响。电影剪辑是做为一个元件放在主场景或它的父元件(电影剪辑和按钮)的时间猪的桢上的,只有是当播放头运行到这个电影剪辑所在的桢上,电影剪辑就进行播放,如果没有在电影剪辑捆绑停止的动作脚本,电影剪辑是循环播放的,直到播放头离开电影剪辑所在的桢才停止播放。电影剪辑至少有起到以下的作用:
1.可以把不依赖主场景播放的电影片段做成电影剪辑,有利于增加作品的条理性。
2. 对于相同的重复利用的电影片段,可以把它做成电影剪辑元件,多次重复利用并不明显增加文件的容量。
3.电影剪辑作为对象类型,在电影剪辑上捆绑动作脚本,能够达到很好的交互效果。
4.在用动作脚本编程时,动作脚本要指向目标的路径,电影剪辑是唯一能可以提供路径的载体。这好象win操作系统的文件夹一样,文件放在文件夹里,要知道文件在什么地方,知道文件夹在什么地方就可以了,电影剪辑提供一个目标的容器和路径的中间载体,如下图:
在电影剪辑D上捆绑动作脚本来控制电影剪辑B内的电影剪辑C运动,在编程时要提供一个路径,如图的路径是:电影剪辑B/电影剪辑C.同样我们要控制电影剪辑B,要知道电影剪辑B和其它电影剪辑的嵌套关系。如果没有电影歼剪辑个路径提供一个载体,是不能找到电影剪辑的。关于路径在以后的章节中讲解。
   
1.4.2增加元件
怎样去增加元件和改变元件的类型?
增加元件:点击“插入/新元件”(Insert/New Symbol),弹出元件属性面板:如下图:


可以给元件命名,选择元件行类型(电影剪辑/按钮/图形)确定后便进入编辑元件的
的后台舞台,我们可以在后台上编辑元件。下图是一个电影歼剪辑的后台舞台。


转变元件类型:如果想把一个图片(为了和元件的图形相区别,把普通的图形叫做图片)转化为元件,点击“插入/转化为元件”(Insert/Convert to Symbol), 弹出图所示面板,可以设定元件各种属性。
快捷键:增加元件  Ctrl+F8
转变元件  F8

1. 5移动渐变与形状渐变
flash有两种渐变效果:渐变移动渐变(Motion Tween)和形状渐变(Shape Tween)。
均只有第一桢和最后一桢两个关键桢,设定渐变后,中间的影桢的图形的位置和形状通过计算机自行运算。做渐变效果,而不是一桢一桢的做动画,能够减少文件的容量。
移动渐变,顾名思义,移动渐变主要做图形的位置变化,当然在渐变中也可以做图形的大小、角度和颜色的变化。元件(包括图形、按钮和电影剪辑)和群组化(Group)的图片可以做移动渐变,非群组化(打散,break ap)的图形不能做移动渐变。移动渐变机器算图的机理和形状渐变是不同的。
  形状渐变,相反是主要做图形的形状变化。元件不能做形状渐变,因为是群组化的图形,群组化的图形是不能做形状渐变的。要做形状渐变,必须把群组化的图形打散。


1.4. 1用移动渐变做Cd盘的匀速转动。
下图中CD盘不停的做匀速转动。

birdonfire
2002-09-23, 09:25 AM
创作思路:
1.作品中只有CD盘是运动的,机身是不动的,在做移动渐变时把CD盘和机身分开做。把CD盘的转动作成一个电影剪辑,最后在主场景中整合。
2.要使CD匀速(注意是匀速)转动,利用移动渐变。
操作步骤:
1.画好机身图。设置主场景的背景和场景画面的尺寸。北京为黑色,画面尺寸400X400.
然后在主场景中画好机身,这就要考验读者的美术功底了。群组化(Ctrl+G机身图.
2.画CD盘,转化为元件。对于画图的基本操作不做说明,如果你是一个初学者,可以找相关的书籍学习,笔者只对怎样画同心圆做一些说明;在工具栏(Tools)中选择圆形工具,边线选择白色,去掉填充颜色,画出一个圆(要画出圆必须同时按住shift键)选择这个圆,复制(Ctrl+C),
原地粘贴(Ctrl+Shift+V),再原地改变图形的大小,按 Ctrl+Alt+S,弹出“大小和角度”(Scale and Rotate)面板
       
输入改变大小百分比(小于100,缩小,大于100,放大)。便可以画出同心圆。画好CD盘后,把它转化为图形元件(选中 CD盘图形,按F8),图形元件存在库(library)中

必须注意的CD盘图形元件的中心(“+”标注的点)必须和圆(CD盘上的圆)的圆心重合,如果不重合,可以在CD盘图形元件的后台舞台中调整。方法是把文字放在另一图层,只选中CD盘图形(不包括文字),打开“信息面板”(Ctrl+Alt+I)如下图:

把X、Y值全设为0,图形的中心就在正中间了。
3.做CD盘转动的电影剪辑。
新增一电影剪辑,命名为diisk_mc,,从库中拖出元件disk, 增加桢( F5)到第30桢,第30桢设为关键桢(F6)。


右键点击图层上桢,在弹出面板中选择“面板/桢”(Panel/Frame)选项,弹出桢属性面板

全部选中桢,在桢属性面板中选择渐变(Tweening)类型为“移动”(Motion)旋转方向为:逆时针(CCW),旋转次数(times)为1。
4.整合动画。回到主场景中,,把CD盘图形元件去掉,在同一位置放置disk_mc电影剪辑。

按Ctrl+Enter预览作品,如果你足够细心,会发现CD盘转动不流畅,而且很慢,是由以下两个原因造成的:
a.桢频率太小,桢频率是每秒影桢播放的次数(单位是fps),flash桢频率缺省值是12fps,
桢频率越大,动画播放的越流畅,当然也越考验你的计算机的运算能力。为了使动画流畅,适当把桢频率设为30 fps.
b. 移动渐变造成渐变的第一桢和最后一桢的图形重叠,播放时产生停滞。如前图,渐变的第一桢和最后一桢图形是一样的,所以当电影片段循环播放时有停滞现象。
  解决方法是:回到电影剪辑后台舞台,把第29桢设为关键桢,然后删去第30桢,使影桢数为29桢
         
最后全部选中影桢,右键点击调出桢属性面板,在面板中把旋转次数(times)设为0,其它的参数不变。



初级创意———遮罩的灵活应用

2.1,遮罩概念的理解
遮罩最少必须包含两个图层,一般是两个图层,但也有多于两图层的,最上面的叫遮罩层(mask layer),其他的叫被遮罩层(masked layer)。遮罩层有什么用呢,是把下面的被遮罩层“遮住”,被“遮住”的部分不是不是不让我们看见,而是让我们能看见,这样理解有点难,也就是遮罩层提供一种这样的作用:它给被遮罩层提供一个平面区域,通过这个平面区域我们能看见这个平面区域内的被遮罩层的内容,在这个区域外不能看见,举一个类子:桌面上放有两本书,大的书一本平放在桌面上,小的一本放在大的上面(桌面相当于场景,大书和小书相当于不同图层的图形和元件,这样我们就不能看见被小的书遮住的大书的被遮住的部分的内容,遮罩有同样的原理,但有一点不同:我们仅能看见被遮住的被遮罩层部分的内容,这和书的类子是恰恰相反的。
大小书都可以拿动,同样遮罩层和被遮罩曾都可以移动(通过移动渐变,形状渐变和动作脚本),我们的目的是要遮住大书的一部分内容,只要达到这个目的,我们不一定要用小书,我们可以用手掌等其他东西,同样遮罩层不一定要是红色图形,我们可以用其他任何颜色的图形,只要它提供一个适当的区域就可以。
上面说了遮罩层和被遮罩层可以移动,包括通过动作脚本的方式,要通过动作脚本的方式移动,就应该把它们设为电影剪辑的类型(moive clip),因为只有电影剪辑可以通过动作移动。


图2—1被遮罩层图形 图2—2遮罩曾产生作用——只有在
原形区域才能看见被遮罩层内容

2.2用文字做遮罩层
作品演示:
在蓝色背景动画下做一段由右向左移动的文字,随着文字的移动,其亮区也跟着移动,形成一种光照由左向右滑过的感觉。


创作原理:
1。利用遮罩来达到这样的效果,这里有两层,文字做为一层放在上面,是遮罩层,下面的被遮罩层是一个色彩渐变的图形。
2.遮罩层和被遮罩层的图形都通过移动渐变(Motion Tween)移动。

操作步骤:
1. 制作背景图
执行“改变/电影”(Modify/Moive)快捷键Ctrl+M,打开电影属性面板,把桢速率(Frame Rate)
由12fps调到30fps。这样可以使移动的动作更加平滑流畅。点击背景(Background)色彩选择器,选择你喜欢的蓝色做为电影的背景。
2准备文字和渐变层
在主场景(sence)中输入文字“初级创意———Flash遮罩灵活应用”字体选择“方正水柱简体”如果你的电脑系统中没有装这种字体,可以进行安装,方法是:
把你要装的字体文件copy到对应的操作系统的“字体”目录里,如果你是win95/win98系统,把字体文件复制到本机系统硬盘的windows/fonts目录里,如果是win2000系统,应该把字体文件复制到WINNT/Fonts目录里,然后在软件里可以找到安装的字体。
考虑到别人在看里的作品时候,由于计算机系统中没有你的作品里的字体,文字会以另外一种字体显示,一般是系统缺省字体,可以把文字打碎(Break Apart 快捷键:Ctrl+B),把文字作为图形处理,但这样会增加文件的体积量,所以在作品中要用到大量的文字,尽量不要打碎字体,可以选用_sans,serif或 _typewiter等计算机通用的基础字体。
3做遮罩效果

a. 将刚才做好的文字转化为元件/图形(symobol/graphic)或者将文字群组化(groud),这样才能给文字做移动渐变(Motion Tween),没有群组化的图形或不是元件是不能做移动渐变的,这一点一定要注意。
b. 制作颜色渐变的图形。制作如下图的的颜色渐变图形,注意使两侧的颜色背景颜色相同,
c. 以便两侧和背景色相吻合。然后把便图形转化为元件/图片或群组化,以做移动渐变。



d.在主场景中新建立两图层,两层均100桢,上面一层命名“文字”放置文字图形,做由向右移动的移动渐变
下面一层命名“渐变”放置做好的颜色渐变图形,做由左向右的移动渐变,注意应该使文字图形正好的颜色渐变图形的上面。

e右键点击第二层,点击属性选项(Properties)如下图,弹出如下层属性窗口
选择遮罩选项,这样,第二层成为遮罩层,下面的一层就成为被遮罩层,按ctrl+enterj键欲蓝生成作品就可以了。






















漂亮的万花筒
通过以上的学习知道遮罩的原理,用遮罩还可以做出很多漂亮的效果,我们看看下面用着遮罩原理做的一个漂亮眩目的万花筒。
作品演示:







创作原理:
做一个这样的电影剪辑:电影剪辑包括两层,遮罩层和被遮罩层,遮罩层是一个正三角形图形,提供一个正三角形状遮罩区域,被遮罩层上的图形在遮罩层下移动。然后在主场景中把六个这样的电影剪辑拼成一个正六方形。

正三角形形状电影剪辑 六个三角形电影剪辑拼成正六边行
操作步骤:
1.制作电影剪辑。新增加一电影剪辑元件“wht_mc,进入电影奸计舞台,
在图层“遮罩层”中画一正三角形图形,图形的颜色任意(不要和场景的背景色相近)
新增加另一图层,命名为“被遮罩层”,画三条任意弯曲的曲线,曲线是横向的长线
所在位置应该在“遮罩层”三角行的纵向范围内。三条曲线群组化一个图形(Ctrl+G),然后给曲线做由右向左平行运动的形状渐变。如下图


然后将“遮罩层”图层移到“被遮罩层”的上面。
2。组合电影剪辑。回到主场景,从库中拖出刚做的电影剪辑,复制一个电影剪辑(Crtl+C和Ctrl+V),旋转60度(Ctrl+Alt+S),按同样的步骤得到其他4个电影剪辑,然后拼合成一个正六边形。
3。加遮罩效果。回到电影剪辑wht_mc舞台,把“遮罩层”图层属性设为遮罩层,这个步骤最好是最后进行,这样有利于方便的拼成六边形(加了遮罩后电影剪辑的棱廓不是三角行)

这个万花筒是利用规则几何图形提供的遮罩效果和几何的对称得到的,是一个很好的创意,通过这个例子,笔者很想说明的是,很多flash作品中很玄和很酷的特效都是利用了简单的遮照效果的,比如文字的色彩的变化,文字块的淡进淡出,探罩灯等等。下面一个超级玄酷的文字变化效果也是利用了遮罩效果,在下一节中做详细的说明。

怎样快速的改变元件/图形的形状大小,旋转角度
在本例中有一个旋转电影剪辑60度的操作,有下面两种方法:
1。执行Windows/Panels/Transform,打开Transform(变更)面板,如下图:

选中要旋转的电影剪辑,选中面板中Rote(旋转)选项,并输入要所要旋转的角度60.0,其它的参数不变,然后点击面板右下角 图标,便可以复制并旋转电影剪辑。
2。选中电影剪辑目标,先复制一个新电影剪辑,然后选中复制的电影剪辑,执行快捷键
Ctrl+Alt+S,弹出Scale and Rotate 面板,如下图:

设置Scale(大小,以百分比计算)和Rotate(旋转角度)参数。便可以旋转和改变目标。

,
超酷的文字遮罩效果
用遮罩效果可以



Flash游戏制作:拍杀飞舞的蚊子
1. 1简介
文件名:Mosquito Killer.fla
通过这个flash游戏范例应该掌握:动作脚本的面对对象编程思想,怎样自定义函数,电影剪辑对象和声音对象的属性和方法。
从这个游戏中可以看到,一些蚊子在游戏界面上随机飞舞,玩家拖动着一个拍子拍打着飞舞的蚊子,直到拍中蚊子,同时配有蚊子飞舞时的叫声和拍中时发出的声音,非常形象。这个游戏和很多流行的flash开发的射击游戏的原理相似,只要把握了这个游戏,做一些射击相关的游戏就很容易了。

动作脚本函数:function , attachMovie, attachSound, random, setPan, startDrag, hitTest , onClipEvent , gotoAndPlay, stop等等。

1. 2技术准备

1.2.1面对对象的编程概念
面对对象(Object Orientation )编程是程序语言的一个革命性的思想,早期的程序语言,比如Basic,Fortran,是一种过程语言(Procedural Languages),过程语言是按程序语句的先后次序一步步运行的,过程语言一步步运行的特性必然要求编程人员对程序的每一行的作用熟悉,这对于大型的程序,对于编程人员来说是一个很大的考验,同时过程语言函数的运用和数据结构(data structures)是没有联系的。
为了解决这些问题,出现了面对对象编程的概念。现在很多的程序语言都引用了面对对象编程的思想,比如经典的C++,跨平台的Java,客户端执行的脚本语言JavaScript,还有我们熟悉的flash的ActionScript(动作脚本)。
在面对对象编程语言中所谓面对对象就是把具有共同属性的物体的信息组合起来,放在一个被称之为类(Class)的集合里,
组合的信息被称为属性(Properties)和方法(Method),可以给类创建一个实体(instance),这个创建的实体也就是这个类的对象(Object),
这样实体(对象)就拥有了这个类的所有的属性(Properties)和方法(Method)。
关于面对对象的概念,可以用一个例子来说明,我们说“人”是一个抽象的概念,这个概念可是说是一个类别,是每个具体人的集合,人有身高,体重 ,肤色,性别等等属性,以及吃饭,睡觉,说话,运动等等方法,那么对于“人”这个类的实体——具体的每一个人都有这些属性和方法,每得到一个新“人”的过程,也是给“人”这个类创建实体的过程。
在flash中我们可以找到很多具有共同属性的集合体,比如电影剪辑(Moive Clip),声音,时间等等。Flash5的ActionScript也创造性的引用了面对对象编程的概念,把电影剪辑元件(Symbol),声音,时间等等各自归为一个类。也给这些类的实体(对象)定义了相关的属性和方法,比如电影剪辑的_x,_y,_alpha,_width等等属性和attachMovie, duplicateMovieClip, unloadMovie等等方法,声音(sound)对象的_soundbuftime等等属性和attachSound,setPan等等方法。

1.2.2自定义函数
函数简单来说就是一段代码块,这段代码可以看作被封装起来执行某一特定的功能,把这段代码封装起来并命名,然后在程序的其他地方可以调用这个函数,函数可以重复的调用,这样就可以大大减少代码量,提高工作效率。函数很象一个“黑箱”,我们根据这个“黑箱”要实现的功能把“黑箱”做好(相似于定义函数的过程),然后利用“黑箱”去实现一定的功能,“黑箱”一旦做好后,没有再必要关心“黑箱”内部的结构,只要拿过来用就可以了。
Flash的函数有预定义函数和自定义函数两种,flash5内置了25种预定义函数,这些函数都已经定义好,只要通过参数传递就可以调用。
但是只有这些预定义函数还不能满足我们的要求,还需要使用自定义函数。自定义函数定义完成后就可以调用,记住一定是先定义自定义函数,再调用函数。比如这个拍杀飞舞蚊子游戏中的ActionScript在影桢的第一桢定义“生成”蚊子的函数createMosquitos,把鼠标光标替换成拍子的函数changeCursor,控制蚊子随机飞舞的函数changeCursor,处理声音的函数playSound,然后在第三桢和电影剪辑mosquito的动作脚本中调用上面这些自定义函数。
可以通过这样的方法定义自定义函数。定义函数时要用到function关键字来申明一个函数,具体过程是:
function 函数名(参数1,参数2…….)
比如游戏中的自定义函数过程:
在主场景的第一桢定义函数createMosquitos:
function createMosquitos (count) {
// create mosquitos
var i;
for (i=1; i<=count; i++) {
_root.attachMovie("mosquito", "mosquito"+i, i);
}
}
在主场景的第三桢调用函数:
createMosquitos(level);
从上面的代码中可以看到,level变量(这个变量在已经赋了一个值)把赋予的数值通过参数count传递给自定义函数createMosquitos
自定义函数再通过“黑箱”操作把得到的结果传递出来,那么代码createMosquitos(level)就实现了“生成”蚊子过程。
调用自定义函数也可以返回一个数值,可以通过一个return语句来实现,flash中的预定义函数,比如sin,abs都是调用后返回一个数
值的,自定义函数也可以实现,比如:
function()sqr(x){
return x*x
}
调用函数t=sqr(5)返回的值t等于25。
1.2.3 电影剪辑对象
电影剪辑(MoiveClip)可以说是flash动画的角色灵魂,在flash4中电影剪辑仅仅是作为一个小电影来处理的,这个小电影有不依赖于主场景时间轴而播放的时间轴,只要播放磁头停在电影剪辑所在的影桢上,这个电影剪辑就循环播放,当播放磁头离开时,电影奸计就停止播放或消失。而flash5以上的电影剪辑不仅仅只有这样的特点,macmeida公司自从从flash5开始在动作脚本中引用了面对对象编程的思想,就创造性而又巧妙的把电影剪辑当作众多对象中的唯一一个图形化的对象,同时规定了电影剪辑对象的一些属性和方法。现在电影剪辑不仅仅是作为一个小动画,更重要的是作为一个动作脚本中的对象,在这个对象上可以捆绑动作脚本,可以实现程序的模块化设计思想,实现电影剪辑对象的嵌套。
电影剪辑(MoiveClip作为一个对象,就有一些属性(Properties)和方法(Method)下面我们分别来介绍电影剪辑的属性和方法。

1.2.3.1 电影剪辑的属性
一般来说电影剪辑的属性分为外部属性和内部属性。电影剪辑有大小,透明度,宽,高,颜色等等属性,这些是电影剪辑的外部的整体的属性,称为外部属性。而象电影剪辑内部的当前桢属性(_currentframe)声音预缓冲时间(_soundbuftime;)等等属性称为内部属性。
可以通过下面两种方式设置电影剪辑的属性:
setProperty ( target, property, value )
target ———电影剪辑实体的目标路径
property——电影剪辑的属性
value——电影剪辑属性值
或者程序语言标准的点语法(dot syntax)方式:
target.property =expression
target ———电影剪辑实体的目标路径
property——电影剪辑的属性

比如游戏动作脚本代码中下面一段的代码:
_parent.x = _root.calculateRandom(-1500, -50);
_parent._y = _root.calculateRandom(80, 200);
scale = 10;
_parent._xscale = scale;
_parent._yscale = scale;
上面的代码是给捆绑这段代码的电影剪辑的上一级的电影剪辑(父电影剪辑)的x,y坐标赋一个坐标值,和给_xscale(电影剪辑x方向大小)
_yscale(电影剪辑y方向大小)赋值。
如表1.2.1是电影剪辑的一些整体属性:

属性类别 说明
_alpha 电影剪辑实体的透明度,设置范围0—100,为0时全部透明,为100时不透明
_highquality 电影剪辑实体显示图象品质,三个具体值,2:最佳品质,1:高品质,0:低品质
_height 电影剪辑实体的高度,以实际像素值表示
_name 电影剪辑实体名
_rotation 电影剪辑旋转角度值
_target 电影剪辑实体目标路径
_visible 电影剪辑实体可视度,两个具体值,0:不可见,1:可见
_width 电影剪辑实体的宽度值,以实际像素值表示
_x 电影剪辑实体在坐标系的x坐标值,以实际像素值表示
_xscale 电影剪辑实体x方向大小与原电影剪辑的宽度的百分比值
_y 电影剪辑实体在坐标系的x坐标值,以实际像素值表示
_yscale; 电影剪辑实体y方向大小与原电影剪辑的高度的百分比值









如表1.2.2是电影剪辑的一些内部属性:

属性类别 说明
_currentframe 电影剪辑实体内部当前影桢值
_droptarget 可拖曳电影剪辑实体拖曳到某一位置所得到的绝对路径
_focusrect 电影剪辑实体可选择区显示布尔值
_framesloaded 电影剪辑实体载入影桢值
_soundbuftime 电影剪辑中声音缓冲时间值
_target 电影剪辑实体目标路径
_totalframes 电影剪辑实体的总影桢数
_url 电影剪辑实体存放的url值











1.2.3.2 电影剪辑的事件
对象都有自己的属性,事件和方法,下面是游戏动作脚本中的一段代码:
onClipEvent (mouseDown) {
// check if the mosquito is hit
if (this.hitTest(_root.customCursor.hitarea)) {
soundobject.stop();
_root.playSound(640, _parent._x, "splatter");
_root.score++;
_parent.gotoAndPlay("hit");
}
}
onClipEvent (load) {
// constructor
_parent._x = _root.calculateRandom(-1500, -50);
_parent._y = _root.calculateRandom(80, 200);
scale = 10;
_parent._xscale = scale;
_parent._yscale = scale;
xStep = 12;
yStep = 8;
// start buzz sound
soundobject = new Sound(this);
soundobject.attachSound("buzz");
soundobject.setPan(-100);
soundobject.start(0, 999);
}
这段代码捆绑在电影剪辑对象mosquito side的实体mosquito上,代码分为两大块,每一块代码都封装在电影剪辑事件onClipEvent (mouseEvent)中,其语法规则是:
onClipEvent (mouseEvent){


statement
}
l mouseEvent——电影剪辑实体事件触发的类别
l statement——事件触发执行的程序语句块
电影剪辑实体事件触发的类别如表1.3.4
电影剪辑事件类别 说明
onClipEvent (load) 电影剪辑实体加载入场景时,触发事件,一般用于初始化变量
onClipEvent(enterFrame) 电影剪辑加载后,只要电影播放就就触发事件,这个事件不需要鼠标或键盘执行某一动作也可以触发,只要播放磁头在电影剪辑实体所在的影桢上
onClipEvent(mouseDown) 鼠标左键按下时,触发事件
onClipEvent (mouseUp) 鼠标左键释放时,触发事件
onClipEvent (mouseMove) 鼠标移动时,触发事件
onClipEvent (keyDown) 键盘按下时,触发事件
onClipEvent (keyUp) 键盘按下后释放时,触发事件
onClipEvent (unload) 电影剪辑实体卸载时,触发事件
onClipEvent (data) 感应到loadVarible或loadMoive指令传送完变量和电影剪辑时,触发事件














注意电影剪辑事件只能捆绑在电影剪辑上.在按纽上和影桢上是不能捆绑电影剪辑事件的,通过下面的方法在电影剪辑实体上捆绑电影剪辑事件:
选中要捆绑动作脚本的电影剪辑实体,调出动作脚本面板,然后从面板左侧的函数区中选中onClipEvent语句,双击,右侧程序编辑区便添加了对应的语句。如图:




在面板下侧的参数选择区勾选一种电影剪辑事件onClipEvent的类别。
1.2.3.2 电影剪辑的方法
电影剪辑常用的方法列举如下:
电影剪辑方法类别 说明
attachMovie 从库中绑定一的电影剪辑
duplicateMovieClip 复制指定的电影剪辑
getBounds 返回在指盯坐标系中电影剪辑的最大和最小x和y坐标值
getBytesLoaded 返回指定电影剪辑载入的字节数
getBytesTotal 返回电影剪辑总字节数
getURL 下载指定的URL文件到指定的窗口,获得一个变量
globalToLocal 将指定对象的全局坐标系转化为电影剪辑的局部坐标系
gotoAndPlay 播放磁头跳到指定的影桢,并从这个影桢开始播放
gotoAndStop 播放磁头跳到指定的影桢,并停止播放
.hitTest 检测指定电影剪辑的边界与目标对象是否“膨胀”
.loadMovie 载入指定的电影剪辑实体
.loadVariables 载入变量
.localToGlobal 将指定对象的局部坐标系转化为舞台的全局坐标系
.nextFrame 播放磁头跳到下一影桢,并停止
.play 播放电影剪辑实体
.prevFrame 播放磁头跳到前一影桢,并停止
.removeMovieClip 删除复制的或从库中绑定的电影剪辑实体
.startDrag 开始拖动指定的电影剪辑实体
.stop 停止播放电影剪辑实体
.stopDrag 停止拖动电影剪辑实体
.swapDepths 交换电影剪辑尸体深度级
.unloadMovie 卸载已经载入的电影剪辑

























其中attachMovie,duplicateMovieClip ,hitTest,.removeMovieClip,startDrag, stopDrag是一些常用的电影剪辑方法。
下面逐个具体说明:
attachMovie
表达式:
anyMoive.attachMovie( idName, newName, depth )
参数:
l anyMoive :捆绑这个动作脚本的电影剪辑实体名
l idName: 在库中要绑定的电影剪辑的标识名
l newName:从库中绑定后得到的电影剪辑实体名
l depth:绑定后得到的电影剪辑实体所在的深度级
具体操作如下:
1.从中选定要捆绑的电影剪辑,右键单击,弹出如图面板,并点击Linkage(关联)项

2. 弹出如图Symbol Linkage Properties(元件关联属性)对话框,然后从Linkage(关联)选项中选择Export this symbol 单选项最后在entifier(标识名)中输入一个标识名,如“mosquito”

3.点击OK按纽确认

在本实例中是在主场景中从库中绑定电影剪辑mosquito
在主场景中的影桢上有下面一端代码:
for (i=1; i<=count; i++) {
_root.attachMovie("mosquito", "mosquito"+i, i);
}
这段代码用于绑定库中的电影剪辑"mosquito”,在主场景中创建一个新的电影剪辑实体"mosquito1(当循环到i=1),并设置该电影剪辑实体的深度级。
上面是在场景中捆绑电影剪辑,创建电影剪辑实体,在电影剪辑上也可以捆绑另一个电影剪辑,创建新的电影剪辑实体,那么该电影剪辑实体就位于原电影剪辑实体的内部。比如在一个电影剪辑实体 mymc捆绑下面的动作脚本:
mymc.attachMovie("mosquito", "mosquito1", 1);
电影剪辑mosquito捆绑在电影剪辑实体mymc上,创建为一个新的电影剪辑实体mosquito1


duplicateMovieClip
表达式:
anyMoive .duplicateMovie(newName, depth)
参数:
newName:复制后所得到的电影剪辑实体名
depth:复制所得到的电影剪辑尸体的深度级

在电影剪辑播放期间,创建这个电影剪辑的一个实体,复制的电影剪辑实体总是从影桢的第一桢开始。在双亲电影剪辑中的变量会拷贝到复制出来的电影剪辑实体中,如果双亲电影剪辑被删除,那么复制出的电影剪辑实体也被删除。可以使用removeMoivClip方法来删除复制出的电影剪辑实体。

hitTest
表达式:
anyMoive .hitTest(x,y,shapeFlag)
anyMoive .hitTest(target)
参数:
l X:场景中的x坐标,一全局坐标系定义
l y:场景中的y坐标,一全局坐标系定义
l shapeFlag:一个布尔值,为ture或false,为ture时是对指定的电影剪辑实体的完整外形求值,为false时是对指定的电影剪辑实体的边框求值
l target:目标电影剪辑实体的路径

这个方法执行后返回一个布尔值,用于检测像游戏中一类射击,殴打,拍打等动作是否击中目标,即是所谓的检测“碰撞” “碰撞”过程是相互的,甲乙两个物体“碰撞”过程,可以是说“碰撞”乙,也可以说是乙“碰撞”甲,所以在flash中可以在“碰撞”对象的双方捆绑hitTest的函数,比如在本实例中,用拍子拍打蚊子,就在蚊子上(电影剪辑实体mosquito)上捆绑下面的动作脚本。这个检测“碰撞”的过程是在拍子拍下后进行的,由于拍子替代了鼠标光标,拍子拍下的过程也是鼠标按下的过程,所以这段检测“碰撞”的代码封装的电影剪辑事件onClipEvent(mouseDown)中:
onClipEvent (mouseDown) {
// check if the mosquito is hit
if (this.hitTest(_root.customCursor.hitarea)) {
soundobject.stop();
_root.playSound(640, _parent._x, "splatter");
_root.score++;
_parent.gotoAndPlay("hit");
}
}

hitTest方法的表达式采用了anyMoive .hitTest(target)的形式,其中_root.customCursor.hitarea是电影剪辑实体customCursor(拍子)的子电影剪辑实体hitarea(拍子上“碰撞”的热区)的路径。如果“碰撞”了,返回布尔值ture ,程序就执行条件语句中的代码。
再来具体说明anyMoive .hitTest(x,y,shapeFlag)表达式



Flash 5教程

  一、标准的Macromedia用户界面
  Flash 5以人们熟悉的Macromedia产品和本行业的其它设计产品的特点为基础,创建了一种横垮Macromedia网络出版生产线的新的用户界面。这种"似曾相识"的用户界面使网络设计人员能够轻易地把Macromedia的网络出版产品集成到他们的工作流中。Macromedia用户界面的主要特色包括:
l 可定制的键盘快捷方式:可以把键盘快捷键定义为任何设计流程均熟悉的按键。
l 启动栏:使用启动栏可以在活动文档窗口快速访问常用的应用程序功能。
l 工具箱布局:工具的布局和分组一致,使工具的选择无缝跨越各应用程序。
l 菜单结构:菜单项和所包含的子菜单保持共同的结构。
l 面板管理:把相关属性集成在一个面板中,面板有相关信息和参数
l 贝塞尔钢笔工具:在Flash、FreeHand和Fireworks中的常用工具(如贝塞尔钢笔工具)的作用相同。
l 颜色选择:颜色选择模式与界面相同,确保颜色应用设计简单。
 

面板管理:

_______________________________________________________________________________
信息面板   Info 选定对象的宽、高、中心坐标位置、 选中颜色RGB值和鼠标位置
填充面板 Fill 填充图形或文字的颜色,包括基本色、渐变递增、圆形递增和位图填充
描边面板 Stroke 定义图像的描边类型,包括直线、虚线、线条粗细和颜色
变更面板 Transform 按比例缩放文字和图象的高度和宽度和设置旋转角度
对齐面板  Align 对图形进行各种排列,调整间距离
调色板面板  Mixer   定义图像的RGB,HSB,HEX值,提供图形的透明(Alpha)功能设置
样品面板 Swatches 管理图像的颜色以及渐变填充
字符面板 Character 编辑字体大小,颜色,字距,行距以及基线移位
段落面板 Paragraph 设置文字段落的对齐,缩进和间距
文本选项面板 Textoptions 设置动态,静态文本和文本表单域的参数
实体面板 Instance 编辑检查动画的元件和实体
特效面板 Effect 提供元件的亮度(Brightness),颜色(Tint)和透明(Alpha)等特效
帧面板 Frame 动画中的场景影桢进行命名和管理,包括移动渐变和形状渐变。
声音面板 Sound 编辑声音,设置音效以及声音的循环
场景面板 Scene 增加场景,给场景命名和场景的次序排列
_______________________________________________________________________________

 二、场景、影桢、关键桢和图层
场景
flash至少在两方面借鉴了电影的概念:一是动态原理:电影是以1/12的速率逐个播放电影胶片形成动态画面的,flash也是逐个播放图层中桢的图形形成动画的。不同是在flash中同一桢中的图形放在不同的的电影图层里。二是场景(也叫舞台)概念,任何电影都是在一定的角色场景中完成的,在一部电影中有多个场景,同样在flash中也有场景(sence)概念,任何动画都是在场景中完成的,在flash中也可以有多个电影场景,如果是个较大的作品,我们可以把动画分在几个场景中做,在播放是按场景的先后顺序依次连续播放


影桢和关键桢

影桢:用于组织动画场景中的元件和图形,把元件和图形排成先后顺序以便播放。
关键桢:场景中不同于其他影桢的起一定做用的影桢
空白关键桢:影桢中没有元件或图形的关键桢

增加,改变影桢的快捷组合键
增加影桢:F5
删除影桢:Shift+F5
增加关键桢:F6
增加空白关键桢:;F7。





图层
图层其实只有两个作用:
1.把同一桢上的图形分不同的层次放置,以便条理清楚,层次分明,比如,我们可以把作为渐变的一些桢放在一个单独的土层里,不受别的图层中的内容影响,能够更好的做渐变效果。在给动画加动作脚本时,为了条理清楚,一般把动做脚本写在一个专门的图层里。
2.由于图层有这样的现象,在上面图层中的内容能够遮住下面的内容,学过photoshop的人很容易理解着这一点:层相互跌加,上面层的内容能遮住下面层的内容,土层的跌加不会影响图形的最终效果。
还有一些特殊的图层:遮罩层和导引层。在做遮罩效果时,必须至少必须两个图层,一个图层是遮罩层,起遮罩作用,遮罩层上的图形本身不显示出来。导引层是给下面层的内容提供一个路径导引作用,导引层上的图形本身不显示出来。图2—5有场景中有两个图层。增加图层的方法是:点击图层下的增加图层图标 ,图层便增加,点击中间的 可以增加导引层,点击 可以删除被选中的图层。

如何给图层命名?给图层命名有必要吗?答案是肯定的,给图层命名一个反映其特征的名字可以增加作品的条理性,当你过一段时间再来整理你的作品或给别人看时,可能不知所云。
左键双击图层头的中间部分。如下图所示(注意不是图层图标)出现一文字框,可以输入图层的名称。



双击图层图标,弹出图层属性面板,可以设定图层的名称,是否被锁定,是普通图层、遮罩/被遮罩、导引/被导引和轮毂色彩等属性。


我们还可以像在场景面板中拖动场景的顺序一样拖动图层的顺序,排在上面的图层其所在的图形也在其他图层的图形上面。


三、元件 (Symbol)概念

元件 (Symbol) 包括图形(garphic)、按钮(button)和电影剪辑(Moive Clip)三种类型,元件一旦制作完成,便自动的存在库(Lirary)中,以后可以重复利用,重复利用元件并不明显的增加动画文件体积,所以对于在动画中经常重复用到的图形和文字,应该制作成元件,然后从库中调出加以利用。

元件到底应该制作成那种形式呢?是图形,按纽还是电影剪辑?那要看我们拿元件去实现什么样的功能。元件中最简单的是图形,不能实现交互的功能(既是不能在上面捆绑动作脚本ActionScript)我们一般把动画中重复使用的图片和文字等制作成图形的形式。在flash中要实现交互的功能,必须利用到按纽和电影剪辑,在按纽和电影剪辑上都可以捆绑动作脚本
只不过是在电影剪辑上捆绑的动作脚本类型要丰富的多,实现的功能也要丰富的多。

做一个简单的按纽元件
执行组合键Crtl+F8,弹出元件属性面板

然后填入元件的名称,勾选元件类型为Button(按纽),确定后便进入按纽元件的后台(相对于前面所说的舞台)

可以看到按纽元件的时间轴(timeout)和主场景中的时间轴不一样,按纽元件只有
四个关键影桢,Up,Over,Down和Hit,,前三个分别对应按纽鼠标事件状态(鼠标没有触及按纽,鼠标悬停在按纽上,鼠标点击按纽),就是说鼠标没有触及按纽时看到的按纽是up影桢中的图形,鼠标悬停在按纽上看到over影桢中图形,鼠标按下时看到down影桢中的图形。

到这里大家可能要问:Hit影桢有什么用呢?Hit影桢中的图形在任何鼠标事件状态下都不显示,她提供一个区域,这个区域内鼠标事件能够触发,在区域外鼠标事件不能触发。

然后在不同影桢下绘制想要的图形。回到主场景,从库中把刚做好的按纽元件拖到主场景中,
按组合键Ctrl+Enter预览。

电影剪辑(Moive Clip)
电影剪辑(Moive Clip)是Flash的角色灵魂。Flash5比FLash4突破的提高是引入了面像对象编程的面象对象思想,把电影剪辑作为一种数据类型。电影剪辑是唯一的图形数据类型,大家现在可能还不是很清楚,在我们用动作脚本编程时可能会有进一步的理解。电影剪辑有自己的不依赖主场景的时间轴独立播放的时间轴,可以做为一部的独立的电影播放。也就是在一段动画里,有一段小电影动画,它是自行播放的,不受主场景的时间主的播放头的影响。电影剪辑是做为一个元件放在主场景或它的父元件(电影剪辑和按钮)的时间轴的桢上的,只有是当播放头运行到这个电影剪辑所在的桢上,电影剪辑就进行播放,如果没有在电影剪辑捆绑停止的动作脚本,电影剪辑是循环播放的,直到播放头离开电影剪辑所在的桢才停止播放。电影剪辑至少有起到以下的作用:
1.可以把不依赖主场景播放的电影片段做成电影剪辑,有利于增加作品的条理性。
2. 对于相同的重复利用的电影片段,可以把它做成电影剪辑元件,多次重复利用并不明显增加文件的容量。
3.电影剪辑作为对象类型,在电影剪辑上捆绑动作脚本,能够达到很好的交互效果。
4.在用动作脚本编程时,动作脚本要指向目标的路径,电影剪辑是唯一能可以提供路径的载体。这好象win操作系统的文件夹一样,文件放在文件夹里,要知道文件在什么地方,

四、形状渐变和移动渐变
我们在很多flash作品中看到物体位置的移动,形状的变化,比如flash MTV作品中一片枫叶由左向右移动,一个人的脸形变成另一个人的或变成一头猪的(搞笑 : ) )。
flash有两种渐变效果:渐变移动渐变(Motion Tween)和形状渐变(Shape Tween)。时间轴上只有第一桢和最后一桢两个关键桢,设定渐变后,中间的影桢的图形的位置和形状通过计算机自行运算。做渐变效果,而不是一桢一桢的做动画,能够减少文件的容量。
移动渐变,顾名思义,移动渐变主要做图形的位置变化,当然在渐变中也可以做图形的大小、角度和颜色的变化。元件(包括图形、按钮和电影剪辑)和群组化(Group)的图片可以做移动渐变,非群组化(打散,break up)的图形不能做移动渐变。移动渐变机器算图的机理和形状渐变是不同的。
  形状渐变,相反是主要做图形的形状变化。元件不能做形状渐变,因为是群组化的图形,群组化的图形是不能做形状渐变的。要做形状渐变,必须把群组化的图形打散。

 五、遮罩(Mask)

遮罩最少必须包含两个图层,一般是两个图层,但也有多于两图层的,最上面的叫遮罩层(mask layer),其他的叫被遮罩层(masked layer)。遮罩层有什么用呢,是把下面的被遮罩层“遮住”,被“遮住”的部分不是不是不让我们看见,而是让我们能看见,这样理解有点难,也就是遮罩层提供一种这样的作用:它给被遮罩层提供一个平面区域,通过这个平面区域我们能看见这个平面区域内的被遮罩层的内容,在这个区域外不能看见,举一个类子:桌面上放有两本书,大的书一本平放在桌面上,小的一本放在大的上面(桌面相当于场景,大书和小书相当于不同图层的图形和元件,这样我们就不能看见被小的书遮住的大书的被遮住的部分的内容,遮罩有同样的原理,但有一点不同:我们仅能看见被遮住的被遮罩层部分的内容,这和书的类子是恰恰相反的。
大小书都可以拿动,同样遮罩层和被遮罩曾都可以移动(通过移动渐变,形状渐变和动作脚本),我们的目的是要遮住大书的一部分内容,只要达到这个目的,我们不一定要用小书,我们可以用手掌等其他东西,同样遮罩层不一定要是红色图形,我们可以用其他任何颜色的图形,只要它提供一个适当的区域就可以。
上面说了遮罩层和被遮罩层可以移动,包括通过动作脚本的方式,要通过动作脚本的方式移动,就应该把它们设为电影剪辑的类型(moive clip),因为只有电影剪辑可以通过动作移动。


图2—1被遮罩层图形 图2—2遮罩曾产生作用——只有在
原形区域才能看见被遮罩层内容



Flash 5教程

  一、标准的Macromedia用户界面
  Flash 5以人们熟悉的Macromedia产品和本行业的其它设计产品的特点为基础,创建了一种横垮Macromedia网络出版生产线的新的用户界面。这种"似曾相识"的用户界面使网络设计人员能够轻易地把Macromedia的网络出版产品集成到他们的工作流中。Macromedia用户界面的主要特色包括:
l 可定制的键盘快捷方式:可以把键盘快捷键定义为任何设计流程均熟悉的按键。
l 启动栏:使用启动栏可以在活动文档窗口快速访问常用的应用程序功能。
l 工具箱布局:工具的布局和分组一致,使工具的选择无缝跨越各应用程序。
l 菜单结构:菜单项和所包含的子菜单保持共同的结构。
l 面板管理:把相关属性集成在一个面板中,面板有相关信息和参数
l 贝塞尔钢笔工具:在Flash、FreeHand和Fireworks中的常用工具(如贝塞尔钢笔工具)的作用相同。
l 颜色选择:颜色选择模式与界面相同,确保颜色应用设计简单。
 

面板管理:

_______________________________________________________________________________
信息面板   Info 选定对象的宽、高、中心坐标位置、 选中颜色RGB值和鼠标位置
填充面板 Fill 填充图形或文字的颜色,包括基本色、渐变递增、圆形递增和位图填充
描边面板 Stroke 定义图像的描边类型,包括直线、虚线、线条粗细和颜色
变更面板 Transform 按比例缩放文字和图象的高度和宽度和设置旋转角度
对齐面板  Align 对图形进行各种排列,调整间距离
调色板面板  Mixer   定义图像的RGB,HSB,HEX值,提供图形的透明(Alpha)功能设置
样品面板 Swatches 管理图像的颜色以及渐变填充
字符面板 Character 编辑字体大小,颜色,字距,行距以及基线移位
段落面板 Paragraph 设置文字段落的对齐,缩进和间距
文本选项面板 Textoptions 设置动态,静态文本和文本表单域的参数
实体面板 Instance 编辑检查动画的元件和实体
特效面板 Effect 提供元件的亮度(Brightness),颜色(Tint)和透明(Alpha)等特效
帧面板 Frame 动画中的场景影桢进行命名和管理,包括移动渐变和形状渐变。
声音面板 Sound 编辑声音,设置音效以及声音的循环
场景面板 Scene 增加场景,给场景命名和场景的次序排列
_______________________________________________________________________________

 二、场景、影桢、关键桢和图层
场景
flash至少在两方面借鉴了电影的概念:一是动态原理:电影是以1/12的速率逐个播放电影胶片形成动态画面的,flash也是逐个播放图层中桢的图形形成动画的。不同是在flash中同一桢中的图形放在不同的的电影图层里。二是场景(也叫舞台)概念,任何电影都是在一定的角色场景中完成的,在一部电影中有多个场景,同样在flash中也有场景(sence)概念,任何动画都是在场景中完成的,在flash中也可以有多个电影场景,如果是个较大的作品,我们可以把动画分在几个场景中做,在播放是按场景的先后顺序依次连续播放


影桢和关键桢

影桢:用于组织动画场景中的元件和图形,把元件和图形排成先后顺序以便播放。
关键桢:场景中不同于其他影桢的起一定做用的影桢
空白关键桢:影桢中没有元件或图形的关键桢

增加,改变影桢的快捷组合键
增加影桢:F5
删除影桢:Shift+F5
增加关键桢:F6
增加空白关键桢:;F7。





图层
图层其实只有两个作用:
1.把同一桢上的图形分不同的层次放置,以便条理清楚,层次分明,比如,我们可以把作为渐变的一些桢放在一个单独的土层里,不受别的图层中的内容影响,能够更好的做渐变效果。在给动画加动作脚本时,为了条理清楚,一般把动做脚本写在一个专门的图层里。
2.由于图层有这样的现象,在上面图层中的内容能够遮住下面的内容,学过photoshop的人很容易理解着这一点:层相互跌加,上面层的内容能遮住下面层的内容,土层的跌加不会影响图形的最终效果。
还有一些特殊的图层:遮罩层和导引层。在做遮罩效果时,必须至少必须两个图层,一个图层是遮罩层,起遮罩作用,遮罩层上的图形本身不显示出来。导引层是给下面层的内容提供一个路径导引作用,导引层上的图形本身不显示出来。图2—5有场景中有两个图层。增加图层的方法是:点击图层下的增加图层图标 ,图层便增加,点击中间的 可以增加导引层,点击 可以删除被选中的图层。

如何给图层命名?给图层命名有必要吗?答案是肯定的,给图层命名一个反映其特征的名字可以增加作品的条理性,当你过一段时间再来整理你的作品或给别人看时,可能不知所云。
左键双击图层头的中间部分。如下图所示(注意不是图层图标)出现一文字框,可以输入图层的名称。



双击图层图标,弹出图层属性面板,可以设定图层的名称,是否被锁定,是普通图层、遮罩/被遮罩、导引/被导引和轮毂色彩等属性。


我们还可以像在场景面板中拖动场景的顺序一样拖动图层的顺序,排在上面的图层其所在的图形也在其他图层的图形上面。


三、元件 (Symbol)概念

元件 (Symbol) 包括图形(garphic)、按钮(button)和电影剪辑(Moive Clip)三种类型,元件一旦制作完成,便自动的存在库(Lirary)中,以后可以重复利用,重复利用元件并不明显的增加动画文件体积,所以对于在动画中经常重复用到的图形和文字,应该制作成元件,然后从库中调出加以利用。

元件到底应该制作成那种形式呢?是图形,按纽还是电影剪辑?那要看我们拿元件去实现什么样的功能。元件中最简单的是图形,不能实现交互的功能(既是不能在上面捆绑动作脚本ActionScript)我们一般把动画中重复使用的图片和文字等制作成图形的形式。在flash中要实现交互的功能,必须利用到按纽和电影剪辑,在按纽和电影剪辑上都可以捆绑动作脚本
只不过是在电影剪辑上捆绑的动作脚本类型要丰富的多,实现的功能也要丰富的多。

做一个简单的按纽元件
执行组合键Crtl+F8,弹出元件属性面板

然后填入元件的名称,勾选元件类型为Button(按纽),确定后便进入按纽元件的后台(相对于前面所说的舞台)

可以看到按纽元件的时间轴(timeout)和主场景中的时间轴不一样,按纽元件只有
四个关键影桢,Up,Over,Down和Hit,,前三个分别对应按纽鼠标事件状态(鼠标没有触及按纽,鼠标悬停在按纽上,鼠标点击按纽),就是说鼠标没有触及按纽时看到的按纽是up影桢中的图形,鼠标悬停在按纽上看到over影桢中图形,鼠标按下时看到down影桢中的图形。

到这里大家可能要问:Hit影桢有什么用呢?Hit影桢中的图形在任何鼠标事件状态下都不显示,她提供一个区域,这个区域内鼠标事件能够触发,在区域外鼠标事件不能触发。

然后在不同影桢下绘制想要的图形。回到主场景,从库中把刚做好的按纽元件拖到主场景中,
按组合键Ctrl+Enter预览。

电影剪辑(Moive Clip)
电影剪辑(Moive Clip)是Flash的角色灵魂。Flash5比FLash4突破的提高是引入了面像对象编程的面象对象思想,把电影剪辑作为一种数据类型。电影剪辑是唯一的图形数据类型,大家现在可能还不是很清楚,在我们用动作脚本编程时可能会有进一步的理解。电影剪辑有自己的不依赖主场景的时间轴独立播放的时间轴,可以做为一部的独立的电影播放。也就是在一段动画里,有一段小电影动画,它是自行播放的,不受主场景的时间主的播放头的影响。电影剪辑是做为一个元件放在主场景或它的父元件(电影剪辑和按钮)的时间轴的桢上的,只有是当播放头运行到这个电影剪辑所在的桢上,电影剪辑就进行播放,如果没有在电影剪辑捆绑停止的动作脚本,电影剪辑是循环播放的,直到播放头离开电影剪辑所在的桢才停止播放。电影剪辑至少有起到以下的作用:
1.可以把不依赖主场景播放的电影片段做成电影剪辑,有利于增加作品的条理性。
2. 对于相同的重复利用的电影片段,可以把它做成电影剪辑元件,多次重复利用并不明显增加文件的容量。
3.电影剪辑作为对象类型,在电影剪辑上捆绑动作脚本,能够达到很好的交互效果。
4.在用动作脚本编程时,动作脚本要指向目标的路径,电影剪辑是唯一能可以提供路径的载体。这好象win操作系统的文件夹一样,文件放在文件夹里,要知道文件在什么地方,

四、形状渐变和移动渐变
我们在很多flash作品中看到物体位置的移动,形状的变化,比如flash MTV作品中一片枫叶由左向右移动,一个人的脸形变成另一个人的或变成一头猪的(搞笑 : ) )。
flash有两种渐变效果:渐变移动渐变(Motion Tween)和形状渐变(Shape Tween)。时间轴上只有第一桢和最后一桢两个关键桢,设定渐变后,中间的影桢的图形的位置和形状通过计算机自行运算。做渐变效果,而不是一桢一桢的做动画,能够减少文件的容量。
移动渐变,顾名思义,移动渐变主要做图形的位置变化,当然在渐变中也可以做图形的大小、角度和颜色的变化。元件(包括图形、按钮和电影剪辑)和群组化(Group)的图片可以做移动渐变,非群组化(打散,break up)的图形不能做移动渐变。移动渐变机器算图的机理和形状渐变是不同的。
  形状渐变,相反是主要做图形的形状变化。元件不能做形状渐变,因为是群组化的图形,群组化的图形是不能做形状渐变的。要做形状渐变,必须把群组化的图形打散。

 五、遮罩(Mask)

遮罩最少必须包含两个图层,一般是两个图层,但也有多于两图层的,最上面的叫遮罩层(mask layer),其他的叫被遮罩层(masked layer)。遮罩层有什么用呢,是把下面的被遮罩层“遮住”,被“遮住”的部分不是不是不让我们看见,而是让我们能看见,这样理解有点难,也就是遮罩层提供一种这样的作用:它给被遮罩层提供一个平面区域,通过这个平面区域我们能看见这个平面区域内的被遮罩层的内容,在这个区域外不能看见,举一个类子:桌面上放有两本书,大的书一本平放在桌面上,小的一本放在大的上面(桌面相当于场景,大书和小书相当于不同图层的图形和元件,这样我们就不能看见被小的书遮住的大书的被遮住的部分的内容,遮罩有同样的原理,但有一点不同:我们仅能看见被遮住的被遮罩层部分的内容,这和书的类子是恰恰相反的。
大小书都可以拿动,同样遮罩层和被遮罩曾都可以移动(通过移动渐变,形状渐变和动作脚本),我们的目的是要遮住大书的一部分内容,只要达到这个目的,我们不一定要用小书,我们可以用手掌等其他东西,同样遮罩层不一定要是红色图形,我们可以用其他任何颜色的图形,只要它提供一个适当的区域就可以。
上面说了遮罩层和被遮罩层可以移动,包括通过动作脚本的方式,要通过动作脚本的方式移动,就应该把它们设为电影剪辑的类型(moive clip),因为只有电影剪辑可以通过动作移动。


图2—1被遮罩层图形 图2—2遮罩曾产生作用——只有在
原形区域才能看见被遮罩层内容

东方楚楚
2002-09-23, 09:26 AM
复制一份到精华区吧?

birdonfire
2002-09-23, 09:26 AM
不知道有没有遗漏的

该贴请不要灌水

转一贴到新手区

birdonfire
2002-09-23, 09:27 AM


手快了
转到精华区就不能转到新手区了

听海的男子
2002-09-23, 09:30 AM
无双怎么了?

无双
2002-10-04, 07:11 PM
申明:上面写的一些字是我很久前写的,大概有快一年了吧,里面很多内容参考了众多闪侠的的帖子,内容比较陈旧,建议大家看看就是,千万不要把它做教材(自作多情的种!)
由于懒惰,没有整理和把图贴出来,这里非常感谢birdonfire(翻译成中文应该叫在火中的鸟,那不是烤鸡吗,也就是大家崇敬的火鸡)辛勤的整理。
最后还想说的是:这里的内容极不全面,这里写的很多概念和原理在我快出的书中都可以找到,而且有大量的实例说明,正在出版过程中,到出版之日希望大家关注。
啊啊,刚发的这个帖子不算水贴吧,如果是,斑竹也速删之!