完全菜鸟新入like180,摩根全方位入息基金求助

每日登录:+1西币&+1积分
&下次自动登录
绑定第三方账号登录 & & &
扫描二维码登录支持中心移动端
获取动态密码
售前文档售后文档热门视频系列热门版区售后服务概述自助服务帮助信息
You are here:
菜鸟求助,S7-200中寄存器VW...
热点活动:
置评已完成,谢谢!
您现在可以为该问题添加标签。
菜鸟求助,S7-200中寄存器VW等在300内怎么做?
- 已解决问题
各位高手,大大,我才开始学习S7-300,遇见好多问题,求助各位,新人,分不多,求帮助。谢谢。。S7-200里面的VW等寄存器,在300编程的STEP7里面怎么表示或者做出来?系统默认好像是没有的?比如VW10。求详解。另,300的传送指令不分数据类型吗?比如200分MOV-W,MOV-B等。我要用MOV-W字传送怎么做呢?另外,模拟量的地址是什么啊?不像200那样的AIW或者AQW吗?我在符号表添加不了模拟量。求解答,谢谢。
问题补充:另外,我做了一个FC功能的块。这个功能块上有几个输入(Int),还有1个输出定义为OUT(数据类型,Int),现在我需要用这个输出结果来做比较,但是300的比较指令不能用#out来做比较条件?这个怎么处理啊?谢谢。另外感谢LS几位的回答。非常感谢。
产品版区:
悬赏分:10 | 解决时间: 15:11:17 | 提问者:& - 新生&nbsp&nbsp第1级
问题ID:59367
S7-200里面的VW等寄存器,在300编程的STEP7里面怎么表示或者做出来?系统默认好像是没有的?比如VW10。求详解。300没有V区,不像200那样都是系统分配好的存储区,直接取VW地址用就行了;300需要先插入数据块DB,然后在DB中分配相应的数据格式,自动生成地址,定义好了才可以用另,300的传送指令不分数据类型吗?比如200分MOV-W,MOV-B等。我要用MOV-W字传送怎么做呢?300里边就一条MOVE指令,对各种数据格式都通用另外,模拟量的地址是什么啊?不像200那样的AIW或者AQW吗?我在符号表添加不了模拟量。地址是在硬件组态中分配的,格式为PIW或PQW建议你找一本《深入浅出S7-300》看看,书上讲的比较透彻
中级技术员&nbsp&nbsp第6级&
以下网友赞了您的问题:
填写您的评论...
提问者对于答案的评价:谢谢
看了这个问题的网友还看了
本版相关问题
本版精华问答
等您来回答
作者/最新回复
最后回复时间
1&&&S7&300&的&CPU&的&M区&相比&s7&200&要大的多,所有可以用&M&区,可以用&DB块&来组织数据;2&&是的,不区分;3&AI&&:&PIW&&&;&AO&&:PQW;
- 高级技术员&nbsp&nbsp第7级
& 00:24:59
1、200中的V区就相当于300中的DB,可以建DB块来使用。2、300是不区分的,只需用MOV指令3、地址是:PIW、PQW
- 高级工程师&nbsp&nbsp第11级
& 07:49:34
1;用背景数据块DB。2;不用区分数据类型。3;模拟量如果是300,则从PIW256地址开始,如果是400,则从PIW512地址开始。输出地址也一样(PQW)。
- 超级顾问&nbsp&nbsp第15级
& 08:16:51
开始学习S7-300,不要死钻个别问题。建议系统看看如下资料:有关S7-300教程,下载:见《S7-300数据类型》连接:见《S梯形图编程手册》下载:《用于S7-300&和S7-400&的语句表(STL)编程手册》下载:&西门子PLC&&CPU寄存器状态字的用法&连接:S7-300/400&PLC编程规范(转载):_
- 大师&nbsp&nbsp第17级
& 11:19:07
上一页1下一页&
扫描打开手机版
支持中心新发布“关注”功能了!实时查看彼此动态,更方便地进行技术交流。
不管是“关注”与“被关注”,相信都是一个美好的开始!
还有多重奖励派送,快快行动起来吧!
20秒帮我们优化支持中心!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
西门子支持中心网站恭祝您新年快乐,万事如意!
诚邀您参加“蓄势待发·相约开启2018新纪元”新年活动!
签到赢大奖,中奖率100%!发帖、回帖,提问、回答,更有惊喜大礼等您拿!
欢迎您来到找答案
在“找答案”,已有超过7万个被解决的技术问题供您参考!
西门子技术专家亲自把关!常规的,简单的问题,在这里您都可以找到答案!
遇到了问题,就来“找答案”提问。
点击搜索框右侧的提问按钮,只需2步就能成功提交问题!分分钟就有无数大侠前来帮你。
在“找答案”每天都有大量的新问题。
别犹豫,只需要点击问题下方的“我要回答”就能参与。答题不光有积分相送,也会给您积攒大侠人气。
“找答案”定期开展各种有奖活动期待您的参与。
更有机会参加西门子高端用户峰会。领略西门子的博大精深!帖子很冷清,卤煮很失落!求安慰
手机签到经验翻倍!快来扫一扫!
菜鸟新手求助下E24F1.8和E50F1.8的选择,抑或等E35F1.8?
6640浏览 / 9回复
目前是Nex5搭标头18-55,感觉除了光圈小了点及无法拍微距外其他还不错
考虑到大光圈的诱惑,准备再入一镜(好吧,也因为有一张貌似只值5毛的九折券)
3选1,基本短时间(估计长时间)不会再入镜头,以后也不会转接
蔡头对我的吸引力一是骚=.=二是据说有不错的微距能力
缺点一是体积大,二是贵,三是官网缺货
E35缺点是要等,但体积很好啊
E50自己感觉焦段不太适合?
个人是有点倾向蔡头的,偶尔还是想微距拍点东西
请各位大侠指点下
另外还有个问题,为什么这些镜头体积差距这么大比如蔡头为什么那么大捏?E35,E50体积就好很多
我也是新手,也是5C,前些时候拍内衣走秀,因为场地较暗套头快门不够,女色当前一时头脑冲血入的E50但结果比较杯具,虽然快门是大大提高,但5C本身对焦很不给力,还大光圈浅景深,基本不糊的片片甚至比用套头还少。当然这很可能跟个人技术有关后来换到朋友的5N上试,在晚上室内灯光下对焦倒还不错,感觉明显比之前5C拍内衣秀强,当然这不是相同场景下的对比暂时对E50的印象,按网上搜索,全开光圈中心锐度也不错,焦外也不错。但边缘画质较差,不单紫边明显(大光圈普遍特征),还有绿边。个人初步体验,拍运动物体快门提高不少,但5C对焦的劣势又大大减弱快门提高所带来的速度优势。而拍静止物体时,比方自动对焦拍摆模特,除虚化明显,没感觉锐度色彩比套头有明显优势E50与千儿八百的50/1.8单反头相比,画质估计大致近似水平,E50材质手感要好些,但单反头上某些参数,譬如焦距窗,E50也不具备……而放到E50差不多价位,几乎可以买50/1.4单反头。比较致命的是,这些单反头大多是全幅头,E50只能半幅……另外E50毕竟相当于大半个5N套机的价钱,或半个600D+小痰盂E35没上市质素不好说,体积重量上的优势你自己知道。焦段上用途不同不好比,E50偏向于人像镜头,E35偏向于标准镜头,假如没特定用途,E35适用范围更广些,挂下机也凑和。E50好像有点不长不短,风景不行挂机勉强偷拍MM又不够。所以个人偏向等E35再看看E24吧,怎么说,个人看法是如果评价比较一致的好又能上全幅,甚至只有两者之一,心理上也比较能接受。另外体积上,用在3/5这些小机身对于外形也是劣势。至于亮骚……前些天去拍喷泉,一排四人,我是5C+1855,左边大妈是D800+鱼眼,右边中年男是A900+2470,嗯另一大妈和我同样朴素,C3+16饼……总的来说,个人觉得NEX配套头考虑便携或转接,性价比很不错,入其它E口头特别是较贵的则要谨慎,当然不差钱除外。比方7000能入E24,但同样7000,现在官网预订5R+才6680,还可得个7折优惠券(最多可买3个头),再添约1800能收入E50或E35……5C可出掉(或玩玩双机身的便利性)。直观点比较,入E24,你的配置是5C+1855+E24;而同样价钱,也可以是5R++E35……选哪个见仁见智吧……扯远了另,购机注册优惠码好像是85折,貌似不记名,E50实体店行货带票都不用9折。5R和6的预售好像今天要结束,如果既想升级5C机身又要买那些几大千的头(E24,18-200,10-18),预售套装和7折专属代码还是可以参考的
对 第1楼 rodman10 说:=========================多谢,很有道理
康泰时 G45吧......
之前不知道E50调价了,现在官网售价是2000,刚发来优惠代码只要1800了,性价比高了不少……好像还有个U30包包送?还有一个问题,5C的ISO是200起步,闪光最高同步是1/160秒,在主体或背景较亮时只得用较小光圈或不开闪。比方开闪拍同一场景,5N是1/160秒,ISO100,F2.5光圈下正确曝光;5C则只能1/160秒,ISO200,F3.5
蔡头对我的吸引力一是骚=.=二是据说有不错的微距能力
缺点一是体积大,二是贵,三是官网缺货
E35缺点是要等,但体积很好啊
E50自己感觉焦段不太适合?
http://www.zhengdoyan.net
郑多燕健身舞全集
http://cjk.riben.in
E24,绝对不二的选择!贵的有道理。我的E24已经做了挂机头,基本上不取下来,18-200反而闲置了,一年难得用两次,庆幸的是18-55早就出手了。和E24的便利性和画质相比,其他镜头的焦段已经不太重要了,E24,不会后悔的。
再说体积,绝对比你想象的小巧,看图片看不出来,上机一看就很明显,我当初也是为体积纠结了许久,当地又没有卖的,网购到手后感觉确实比图片上显小,如果裤子不太紧,完全可以将装上E24的5C装进裤袋。
一分钱一分货,索尼不傻。银子不缺就一定E24,如果米紧,E50*1.8吧,锐度给力。
laolvtongzhi 发表于
E24,绝对不二的选择!贵的有道理。我的E24已经做了挂机头,基本上不取下来,18-200反而闲置了,一年难得用...
中一光学的35/0.95怎么样啊,我在纠结于它和E24,给点建议吧
35/0.95没用过,不便评价。虽然现在价格下来了,但总觉得手动头不方便。还是建议E24吧,价格已经触底,四千多就可入手,自动蔡司,干活方便,可参考我以前的帖子:http://dcbbs.zol.com.cn/83/167_820138.html
可能感兴趣的板块:
用户名/注册邮箱/注册手机号
其他第三方号登录ActionScript菜鸟教程 .
我的图书馆
ActionScript菜鸟教程 .
第1章 揭开ActionScript的神秘面纱
ActionScript是Flash内置的编程语言,用它为动画编程,可以实现各种动画特效、对影片的良好控制、强大的人机交互以及与网络服务器的交互功能。 ActionScript是一门吸收了C++、Java以及JavaScript等编程语言部分特点的新的语言。ActionScrip使用英文单词和元件提供了一种为Flash影片设置指令的方法。它的存在确保了Flash影片较之普通的按照线性模式播放的动画具备强大得多的人机交互能力。 可以为时间轴中的关键帧、按钮和影片剪辑添加ActionScript。选中这些关键帧、按钮和影片剪辑,打开其动作面板,你就可以看到它们都添加了哪些脚本。
1.1 Flash中的程序 交给计算机执行的指令集称为程序。程序的另一个名称叫做脚本。从现在开始,我们将这些指令集统称为脚本。 脚本都必须有它的运行环境,就ActionScript来说,它的运行环境就是Flash影片。ActionScript可以指挥Flash影片该做什么。在某些情况下,ActionScript还可以指挥其他的东西,如用户的操作系统、浏览器等。但是ActionScript最主要的用途还在于控制Flash影片内部的东西。 短的脚本可以只有一行,长的脚本可以长达几千行。它们可以作用于Flash影片的一个部分,也可以贯穿影片始终。有人把使用了脚本的整个Flash影片看作一个程序,也有人把影片中单独出现的脚本看作一个程序。这两种看法都正确,因为一个单独的程序也可以被定义成若干小程序。 你可能对某些编程语言已经相当熟悉或者有所了解。例如广大网页设计者所熟知的JavaScript,以及另一种相似的语言VBScript,它们能用来编辑动态网页。HTML(Hypertext Markup Language 超文本置标语言)是另一种特殊的语言,浏览器将按照它所包括的指令正确地显示文本和图片。 在学校里面,你可能接触过一些编程方面的课程,如BASIC、Pascal、C、Java等。 除HTML以外,以上提到的所有的语言都包含很相似的程序结构:循环、条件、变量等等。只要你知道了ActionScript的特殊用法,你就可以将以前所学的编程知识利用起来。就算你以前从来没有接触过编程方面的知识,不用担心,我会将所有需要的知识都告诉你。 1.2 ActionScript是从哪里来的 ActionScript是从哪里来的呢?事实上它的确是从好几种程序语言中深化而来的。下面我们先花一点时间了解一下计算机语言的起源和发展。 当第一台数字计算机诞生的时候,唯一的编程语言是计算机的专用语言——二进制代码,即由数字1和0组成的编码。当由1和0组成的不同序列被输入到计算机中,计算机就会执行完全不同的操作。使用这种语言编写程序是相当费劲的,就算写一个简单的两数相加的程序,程序的长度也是相当惊人的。 为了避免每次都为两数相加的操作书写长长的二进制程序,有人书写了一种专门用于两数相加的代码,你可以方便地使用相同的代码实现任意两数的相加操作。接着,一些类似的函数诞生了,用它们可以处理所有的基本任务,如加、减、乘、除、比较、循环等等。从此以后,你可以使用这些事先编写好的函数执行几乎所有的操作了。 现代的计算机语言理解和使用起来较之二进制编码都已经容易了无数倍,其一,现代计算机语言与英语语法很相似,如“go”、“for”、“begin”、“if”以及+、-、=等,它们的含义和用法与现实中都相差不大。 BASIC、Pascal等编程语言,几乎可以像英语句子一样阅读,所以学习和理解起来都非常容易。其他语言,如C、Fortran,它们的功能更强一些,经验丰富的程序员可以用它们完成更复杂的任务。更多的语言居于以上两种语言之间,如C++、Java和JavaScript,它们既有一定的可读性,也有较强的功能。ActionScript与这些语言有更多的相似之处。 Flash遵从ECMA(European Computer Manufacturers Association欧洲计算机工业协会)制定的标准,因此ActionScript与ECMAScript(ECMA开发的一种语言)极其相似。所以与其说ActionScript建立在JavaScript的基础上,不如说ActionScript和JavaScript都建立在共同的基础之上。 Flash具备交互功能,它的早期版本已能够利用简单的脚本实现不太复杂的导航和按钮。同时,Flash还是一种矢量动画工具,它的发展是与对它的应用需求分不开的,比如说网页设计者需要一种工具来制作体积更小的图像,由于矢量图是由线条和填充色构成的,而不是像位图一样由像素构成,所以它能够大大缩减文件大小,正顺应了网页设计者的需求,使许多系统配置低的用户也能够访问和浏览他们的网页。 虽然说Flash是一个图形动画工具,但也不是没有使用程序的需要,比如说设计者需要制作一个按钮,让别的用户能通过单击按钮浏览到别的页面。 Flash早期版本中的脚本非常简单,直到Flash 4,才具有了标准的程序结构,如条件结构、循环结构等。但是Flash脚本仍然需要使用下拉菜单和空白文本框添加,几乎还不能叫做一种编程语言。 真正的ActionScript到了Flash 5才出现,程序员可以直接键入程序并将程序添加给需要作用的元素。Flash MX更大地扩展了ActionScript,现在的ActionScript提供了多达300余种命令、函数、运算符和结构,这才真正成为一种成熟的程序语言。 1.3 初识ActionScript 脚本是由英语单词、数学符号和函数构成的,下面是一个ActionScript的例子: on (press) { gotoAndPlay ("my frame"); } 你可以通过其中的关键单词推测这段程序的作用。单词press表示按,即用鼠标在某种对象上面单击,这里的对象就是按钮。第二行中的长单词可以分开读成“go to and play”,可以将其理解为命令Flash到达影片中的一个特定位置并从这一特定位置开始播放影片。 从以上可以看出,ActionScript可以控制Flash影片的播放。在着手学习ActionScript之前,我们将对ActionScript在Flash影片中的功能作更多的了解。 Flash影片可以包含若干场景,每个场景都有时间轴,每条时间轴从第1帧开始。如果不添加ActionScript,Flash影片会自动从场景1的第1帧开始播放,直到场景1的最后一帧,然后接着播放场景2,以此类推。 ActionScript的主要目的就是用来改变这种自动而死板的线性播放行为,一段脚本可以使影片在一个特定的帧上停止,循环播放前面的部分,甚至于让用户控制要播放哪一帧。ActionScript能够使影片完全脱离被动的线性播放模式。 这还不是ActionScript的所有功能,它还可以将Flash影片从简单的动画改变为具有交互能力的电脑程序。下面让我们见识一下ActionScript能实现的一些基本功能。 = 控制播放顺序 你可以通过选择某个菜单将影片暂停在某个位置,然后由用户来决定下一步干什么,这就避免让影片径直朝前播放。 = 创建复杂动画 直接使用Flash中的绘图工具和基本命令来创建足够复杂的动画是相当困难的,但是脚本可以帮助你创建复杂的动画。例如可以用ActionScript控制一个球在屏幕中无休止的跳动,并且可以使它的动作遵从物理学中的重力定律。如果你不用ActionScript来实现这样的动画,你将需要几千帧来模仿相似的动作,而用ActionScript,你将只需要一帧。 = 响应用户输入 你可以通过影片向用户提出问题并接收答案,然后将答案信息用于影片中或将其传送到服务器。加入了相应ActionScript的Flash影片更适合做网页中的表单。 = 从服务器获取数据 与向服务器传送数据相反,使用ActionScript也可以从服务器中获取数据,你可以获取即时的信息并将它提供给用户。 = 计算 ActionScript也可以对数值进行计算,用它可以模拟出各种复杂的计算器。 = 调整图像 ActionScript可以在影片播放时改变图像的大小、角度、旋转方向以及影片剪辑元件的颜色等。你还可以从屏幕中复制或删除对象。 = 测试环境 你可以用ActionScript测试Flash影片的播放环境,如获取系统时间,获取Flash Player的版本信息等。 = 控制声音 ActionScript可以方便地控制声音的播放,甚至控制声音的声道平衡和音量等。 1.4 ActionScript放在哪里 初学ActionScript的Flash爱好者最想问的问题恐怕是“ActionScript应该放在哪里?” Flash是一种复杂的多媒体编辑环境,如果你曾经使用过Flash,或者看过Flash MX附带的教程,你就应该知道Flash中的一些基本术语或元素。在Flash的元素中有3个地方可以放置脚本。 1.4.1 时间轴 Flash影片中的每个场景都有时间轴,时间轴上的每个关键帧都可以放置脚本。并且,你还可以在每一个关键帧的不同层上放置不同的脚本。 在主时间轴中放置脚本之前,需要先选择一个关键帧。启动Flash时,时间轴中有一个空白关键帧当选中一个关键帧后,你就可以打开动作面板,查看里面的脚本或者开始编写你自己的脚本了。 有几种方法可以打开动作面板。你可以选择“窗口”→“动作”命令,或者按快捷键F9。 如果你对Flash复杂的影片浏览器比较熟悉,你也可以在影片浏览器中查看整个Flash影片所用到的脚本。打开影片浏览器的快捷键是Alt+F3。 如图1-2所示即为Flash MX的动作面板。该动作面板被命令为“动作-帧”,这是因为其中的脚本将作用在帧上。如果是新建的一个影片,动作面板将是空的。后面我们将在动作面板中添加各种各样的脚本。第2章我们将看到如何使用动作面板。时间轴中的脚本将在Flash影片播放到脚本所在的关键帧位置时自动执行。例如,如果你为某一关键帧添加了stop()命令,当影片播放到那一帧位置时就会自动停止。要让影片继续播放,只有在其他的脚本中添加相应的命令。 在时间轴中添加脚本还有一个好处就是方便你在ActionScript中使用函数。函数是可以重复使用的脚本代码,要想使整个影片都可以调用脚本中的函数,就必须将函数放置在主时间轴中。 1.4.2 按钮 Flash中的元素又称作元件(symbol)。元件主要有3种:图形(graphic)、影片剪辑(movie clip)和按钮(button)。图形元件不能承载脚本,它们只能是简单的静态或动态图像。影片剪辑与图形元件类似,但是它可以承载脚本。 第3种元件就是按钮,按钮可以承载脚本。事实上,如果没有脚本,按钮几乎不会发挥什么作用。 要为按钮添加脚本,首先要在舞台中选中按钮,然后选择“窗口”→“动作”命令或按快捷键F9打开动作面板。 与帧动作面板相对应,选中按钮时动作面板的标题是“动作-按钮”。 你可能会认为,为按钮添加的脚本应该是在单击按钮时执行。其实,也可以为其他鼠标动作添加相应的脚本,如鼠标进入和移出按钮区域。按钮也可以响应按键动作,这使得我们可以方便地为按钮设置快捷键。 1.4.3 影片剪辑 影片剪辑不同于图形元件,可以为影片剪辑命名,为影片剪辑添加脚本。为影片剪辑添加脚本的方法与按钮类似。 为影片剪辑添加的脚本可以用来控制影片剪辑自身或控制时间轴中的其他影片剪辑。使用脚本可以判断影片剪辑出现在屏幕中的什么位置,你也可以用脚本来控制影片剪辑的重复播放等,进而控制整个动画。 除了可以为影片剪辑添加脚本,你也可以在影片剪辑内部添加脚本。影片剪辑其实也是一个单独的Flash影片,在影片剪辑中有一条单独的时间轴,你可以像在主时间轴中添加脚本一样在影片剪辑内部的时间轴中添加帧动作脚本。同样地,你也可以将按钮放置到影片剪辑内部并为按钮添加脚本。也就是说主时间轴中的影片剪辑里面有子影片剪辑,子影片剪辑里面又有按钮,按钮中也可以有影片剪辑,如果需要,你都可以为它们添加脚本。 1.5 练习:你的第一段ActionScript 下面来编写你的第一段ActionScript,让你对ActionScript有更深的了解。操作步骤如下: (1)创建一个新的Flash文档。 (2)选中时间轴中的第1帧,按F7键两次插入两个空白关键帧,这时时间轴中应有3个空白关键帧。 (3)在每一帧中绘制不同的图形。 (4)选择“控制”→“测试影片”命令或按Ctrl+Enter键测试影片,你会看到影片在这3个帧之间循环播放。 (5)回到主时间轴,选中第2个关键帧,按F9键打开动作面板。 (6)动作面板左边显示了可扩展的ActionScript关键字目录。在“动作”/“影片控制”目录下面找到关键字stop并双击,脚本窗口将添加如下所示的一行语句: stop(); (7)关闭动作面板,按Ctrl+Enter键测试影片,播放第1、2帧后影片会停止,你将看不到第3帧。 ActionScript发挥了作用,它成功地阻止了影片无休止地循环播放这3帧。
第2章 Flash MX的动作面板
动作面板是Flash MX面板系统的一部分,ActionScript程序员经常会用到它。为了成长为一名娴熟的Flash编程高手,你有必要对Flash的动作面板和在线帮助系统相当的熟悉。 动作面板的标准模式允许你从脚本目录中选择关键字并设置相应的选项,而专家模式为程序员提供了直接输入代码的自由。
2.1 了解动作面板 Flash MX的面板系统向你提供了查看和设置Flash中各种元素信息和属性的捷径。第一次启动Flash MX的时候,系统将会询问你要使用Flash做哪些方面的工作,然后为你设置默认的面板界面。你可以选择“窗口”→“面板设置”命令在不同的面板界面之间切换。与此同时,也决定了动作面板的大小,但是你可以将它改变成任何适合你需要的大小。 你可以通过键盘上的F9键随意显示或隐藏动作面板。显示动作面板后,你可以单击它的标题栏将它展开或折叠起来。你还可以拖动动作面板的左上角将它从Flash的工作界面中分离出来。 动作面板有两种不同的工作模式。默认的模式是标准模式。在标准模式下,你必须从窗口左边的菜单中选择需要的关键字,而不能直接使用键盘输入脚本,因此可以有效避免即使是很细小的错误。 2.2 动作面板的标准模式面板上部的下拉菜单显示了你当前所编辑的脚本的准确位置。图2-1中显示的是“帧动作脚本1 图层名称 图层1”,也就是说当前所编辑的脚本是作用于图层1的第1帧的。 面板左边显示了ActionScript命令的分类目录,单击展开一个目录,你将看到它里面的子目录或命令。 面板的右边是一个空白文本区,它将显示你所选择的命令和函数。图2-2显示了你从左边的目录里面选择插入“动作”→“影片控制”中的goto命令后的动作面板。goto命令是通过双击鼠标添加到脚本中的。面板右上部显示了goto命令的简单定义,下面显示了与goto命令相关的各种选项,包括“场景”、“类型”和“帧”等,就像是所选命令的参数设置区。参数设置区的状态会依据所选择ActionScript命令的不同而发生变化。 第一个需要设置的选项是选择gotoAndPlay命令还是选择gotoAndStop命令。图2-2中选中的是“转到并播放”单选项,也就是gotoAndPlay。这两种命令是相似的,都是跳转到特定的帧,但是gotoAndPlay命令使影片从特定帧开始播放,gotoAndStop命令使影片在特定帧上停止。 这个命令还需要附加一些信息才能正常工作。如,你想要使影片跳转到哪一帧,这一帧位于哪个场景,图2-2指定的是当前场景。在“类型”下拉菜单中可以选择指定特定帧的方式,你可以使用帧号、帧标签和表达式中的一种。图2-2选中的是帧号类型,这就要求你精确地指定帧的编号,如1。 在以上内容的下面显示了 和 两个按钮。它们使你可以快速地在脚本中插入和删除命令。但是这种方法很少使用,你可以通过左边的分类目录添加脚本,使用键盘上的Delete或Back Space键删除不需要的命令。 和 按钮的右边还有几个功能不一的按钮。 按钮使你可以从脚本中查找文本, 按钮使你可以替换文本,使用 按钮可以插入目标路径, 按钮可以为你调试脚本设置断点, 和 按钮使你可以选择脚本的前一行或后一行。 在动作面板的底部你可以看到这样的一行:“第1行:gotoAndPlay(1);”,这是动作面板的状态行,它显示了当前选中的行号和该行的内容。 2.3 分类目录 动作面板左边的目录将ActionScript的关键字有组织地分成几组,以使你更容易查找到需要的关键字的位置。以后我们会对每个组中的命令和符号作详细的讲解,下面先对其进行一下简要的介绍。 = 动作 在动作类中包含了最简单的ActionScript命令。动作类提供了测试条件、循环、创建函数、复制和创建影片剪辑以及从服务器中获取数据等功能的命令。动作类中的命令是ActionScript最重要的组成部分。动作类又分为影片控制、浏览器/网络、影片剪辑控制、变量、条件/循环、打印、用户定义的函数以及其他动作等子类。 = 运算符 它包括了各种数学和比较运算符,如+号,用于两数相加;==号,用于判断两数是否相等。运算符类下面又分为按位、比较、赋值、逻辑、算术和其他运算符等子类。 = 函数 使用函数可以转换数据或获取需要的信息,如获取Flash的版本信息。你可以使用函数将字符串123转换成数字123。你还可以自定义需要重复使用的函数。在函数类下面主要有两个子类:数学函数和转换函数。 = 常量 常量类中包含了一些具有特定值的特殊关键字,如true、false、null和newline等。 = 属性 属性类中的关键字反映了Flash中元素的相关信息。例如_x属性代表影片剪辑在屏幕中的水平位置。 = 对象 对象类是最复杂的一类,它包含了ActionScript中的众多概念。所有的对象关键字被分成4个子类:核心、影片、客户端/服务器、创作。影片剪辑是影片类下面的一种,它包含了与控制影片剪辑相关的关键字。Math是核心下面的一种,它包含了求平方根、正弦值等数学函数。 = 否决的 这一类中的关键字是已经作废但Flash MX仍然支持的,在Flash MX中请尽量避免使用,因为在以后的Flash版本中将不再支持这些关键字。 = Flash UI组件 这一类中的关键字包含了特殊功能的组件,如单选按钮、滚动条等。 = 索引 索引类将ActionScript中的所有关键字按字母顺序排列。以上各类中的关键字都可以在索引类中找到。 动作面板中提供的关键字分类有时可以帮你方便地找到需要的关键字,但也有可能给你带来麻烦。如你可能认为表示影片剪辑水平坐标属性的_x应该在对象类的“影片”/“影片剪辑”/“属性”里面,但它却在属性类里面。你可能认为sqrt(开平方)应该在函数类中,但它却在“对象”/“核心”/“Math”/“方法”下面。 2.4 使用Flash的帮助系统 最好的程序员往往也要查阅一下工具书,Flash中的帮助系统就是一本功能强大的工具书,所以在学习更多内容之前,先了解一下Flash的帮助系统,将对我们的学习不无陴益。 Flash使用工具提示和基于扩展HTML的帮助系统。为了对ActionScript的使用更加娴熟,你就需要知道如何使用它们。 2.4.1 简单定义 如果你习惯使用动作面板中的关键字分类目录,你应该会注意到当你在左边的目录中选中某个关键字时,面板右边的上面部分会给出与所选关键字相应的简单定义。你会看见这样的句子:“要添加某项,可双击该项或将其拖动到脚本窗口。 例如选中goto命令时,你会看到这样的提示:“转到影片的指定帧。”它显示了该脚本的基本功能。 单击别的命令查看一下它们的定义,在学习下面的知识之前,你可以花些时间多看一下动作面板中的命令。 2.4.2 脚本参考面板 Flash使用脚本参考面板帮助你记住ActionScript的语法。可以选择“窗口”→“脚本参考”命令或按快捷键Shift+F1打开脚本参考面板。脚本参考面板的左边与动作面板左边的脚本目录很相似。你也可以通过动作面板进入脚本参考面板,单击动作面板中的 按钮可以打开脚本参考面板,打开的脚本参考面板会自动显示你在动作面板中选中的命令。 2.4.3 HTML帮助文档 如果要获得ActionScript命令更详细的说明,可以选择“帮助”→“动作脚本词典”命令,这将启动你的浏览器并打开如图2-4所示的页面。 图2-4 动作脚本词典 浏览器窗口的左边是所有ActionScript命令和函数的总目录,在左边的条目上单击,窗口的右边部分会显示其详细的内容。 选中每个条目时,右边窗口中通常会包括与该条目的说明以及它的使用范例。 在你以后使用Flash的时候可能经常会用到帮助文档,所以请花一些时间了解它吧。 2.5 动作面板的专家模式 现在你已经了解了动作面板的标准模式,下面要向你推荐多数ActionScript程序员使用的专家模式。 在专家模式下,你可以直接通过键盘输入脚本,而不需要从左边的目录中选择命令。这种模式下你可以在动作面板中输入任何东西,但也很容易导致错误。 在专家模式下,你仍然可以从左边的目录中选择并插入标准的ActionScript命令、函数和运算符。当你记不确切一条命令的时候就可以使用这种方法。 2.5.1 切换模式 要从标准模式切换到专家模式,可以单击动作面板中的 按钮,或者单击动作面板右上角的 按钮,在打开的下拉菜单中选择“专家模式”命令。在动作面板获得焦点的情况下,快捷键Ctrl+Shift+N可以切换到标准模式,快捷键Ctrl+Shift+E可以切换到专家模式。 如图2-5所示为专家模式下的动作面板。在专家模式下,参数设置区、命令提示信息都没有了,脚本编辑窗口占据了动作面板右边的大部分。从标准模式切换到专家模式是非常容易的,但是要从专家模式切换到标准模式则要求脚本中没有语法错误。比如说你不明白如何设置一些命令的参数,需要从专家模式切换到标准模式以使用标准模式下的提示,但是Flash却不允许你进行切换,提示你“此脚本中有语法错误,必须在‘专家模式'下编辑它”;而当你知道如何设置参数并将脚本书写正确了,又不再需要切换到标准模式了。 2.5.2 动作面板的下拉菜单 动作面板的下拉菜单中有一些特别是在专家模式下编辑脚本时很有用的命令。 你可以使用查找和替换命令在代码中执行查找和替换操作。按快捷键Ctrl+F可以打开“查看”对话框,按快捷键Ctrl+H可以打开“替换”对话框。 “转到行…”命令可以快速转到并选中指定的行。 “语法检查”命令或按钮 可以对窗口中的脚本进行语法检查,如果没有语法错误,将提示你“此脚本中没有错误。” 通常,语法检查只能检查出代码中的明显语法错误,它并不能检查脚本是否能正确运行。经常会发生这样的事情,就是每一行的代码都是正确的,但所有的代码加在一起却导致了错误。 语法检查功能很实用,特别是对初学者来说,它能方便地检查出误用运算符或缺失括号等情况。 “自动套用格式”命令可以按预先设置的样式和缩进等设置脚本的格式。你可以选择“自动套用格式选项”命令,在“自动格式选项”对话框中重新设置要应用的格式,另外,选择“首选项…”命令可以设置动作面板中脚本代码的颜色、制表符宽度、字体等。你也可以在Flash MX的菜单栏中选择“编辑”→“首选参数”命令,在打开的“首选参数”对话框中选中“动作脚本编辑器”选项卡,打开相同的对话框,如图2-7所示。 图2-7 “首选参数”对话框 为脚本上色有利于编写程序。使用这项功能时,你将看到ActionScript中的关键字以一种颜色显示,而另外一些变量和常数以另外的颜色显示。这对初学者是很有帮助的。如正确输入关键字gotoAndPlay后,它马上会以蓝色显示。如果它的颜色没有发生变化,有可能就是你的输入有误。 动作面板下拉菜单中还有导入导出文件以及打印等命令,可以将使用外部的文本编辑器编辑好的脚本导入到动作面板中,或将动作面板中的脚本导出或打印出来。 从外部导入脚本的方法并不值得推荐,因为动作面板虽然不是最快捷的文本编辑器,但是在其中编辑ActionScript是最好的,你可以在需要的时候参照脚本分类目录,可以即时的查看Flash中的影片剪辑的名称,查看帧编号或帧标签。另外,你还可以快捷地切换到Flash影片中要插入脚本的任何位置。 2.5.3 在专家模式下输入脚本 使用动作面板的专家模式要比标准模式容易得多,因为在专家模式下你只需要敲击键盘,而不需要在窗口中填写表格。专家模式下的动作面板就像一个简单的文本编辑器。 使用专家模式的缺点就是很容易出错。标准模式为你添加了很多限制,而在专家模式下你有可能键入不正确的命令或者将参数放错位置。 在专家模式下,你可以方便地将光标定位在合适的位置。但是Flash也不能完全任你随心所欲,它会在你键入的同时自动调整脚本格式,将不同的关键字设置成不同的颜色。 你可以单击 按钮以检查脚本中的语法错误,单击 按钮以格式化整个脚本,如在需要的位置换行、设置空格和缩进等。 动作面板还有代码提示的功能。当你键入脚本的时候有时会出现一个提示菜单,你可以忽略它继续键入,或者从中选择需要的项目。单击 按钮可以显示代码提示。 2.6 练习:在专家模式下输入脚本 下面我们练习在专家模式下输入脚本。其操作步骤如下: (1)新建一个文档。 (2)选择默认的场景1图层1中的第一个空白关键帧。 (3)按F9键打开动作面板。 (4)使用菜单将动作面板切换到专家模式。 (5)在脚本编辑区单击。 (6)键入下面的一行代码: gotoAndPlay(5);
第3章 ActionScript编程初步
计算机程序是由命令、函数、运算符、条件和循环等结构组成的。命令是为计算机下达的一系列指令,函数执行计算和返回值,通过运算符将若干数据以某种特定的方式结合起来,条件测试一个或多个值以返回一个为true或false的布尔值,循环结构使得程序能够重复执行一系列相同的指令。 变量是存储数据的容器,变量有变量名和变量值。 编程是一项需要耐心的工作,首先你必须理解要用程序解决什么样的问题,然后需要将这个问题分解成若干步骤,将每个步骤再分成更小的步骤,直到每个步骤都小得很容易解决了为止。 程序编写好后,可能会存在许多漏洞或缺陷,所以你还需要对程序进行调试,直到程序能正确运行为止。
3.1 程序基本结构 计算机程序是由命令、函数、运算符、条件和循环等结构组成的。 3.1.1 命令、函数和运算符 在此之前,我们都是用关键字来描述ActionScript中的元素,如关键字gotoAndPlay,它也是一个命令。 命令是ActionScript中用来告诉Flash所要执行的特定操作的元素。之所以称之为命令,就是因为它将被严格的遵照执行,如果要用gotoAndPlay跳转到一个不存在的帧,这样的命令就不能被执行。 命令是程序中最基本的元素,在Flash中如果不使用命令,几乎不能进行任何操作。从本书中你将学到很多命令。 函数是ActionScript中用来执行计算和返回结果的元素。例如,一个特定的函数可以计算并返回一个指定数的平方根。 命令和函数都可以使用参数。参数就是传递给命令或函数的一个值。如gotoAndPlay命令就至少需要一个帧编号或帧标签作为参数。求平方根的函数也需要一个数值作为参数。 与命令和函数不同的是运算符,它们主要是一些符号,而不是字母。例如,+运算符执行两数相加的操作。 在ActionScript程序中你将会用到大量的命令、函数和运算符。 3.1.2 变量 要编写复杂的计算机程序往往需要存储很多的信息。有时你可能只需要存储很短暂的时间,例如,如果需要重复执行10次相同的命令,你就需要对命令的执行次数进行记数,直到满10次为止。 所有的编程语言都使用变量来存储信息。一个变量由两部分构成:变量名和变量的值。 1.变量名 变量名通常是一个单词或几个单词构成的字符串,也可以是一个字母。总的来说,你需要尽可能地为变量指定一个有意义的名称。 例如,如果你要使用变量存储用户的姓名,用userName作为变量名将是一个很好的选择。如果你使用n作变量名,似乎太短了一点;如果使用name,又可能与影片中其他对象的名称相混淆。 在ActionScript中为变量指定变量名时已经形成了一种不成文的规范,就是变量名通常以小写字母开头,当一个新的单词出现时,大写这个新单词的第一个字母,如userName,长一点的例子如currentUserFirstName。 变量名中不允许出现空格,也不允许出现特殊符号,但是可以使用数字。 2.变量类型 你可以用变量存储不同类型的数据。数字是最简单的变量类型。 你可以在变量中存储两种不同类型的数字:整数和浮点数。整数没有小数点部分,如117、-3685都是整数。浮点数有小数点部分,如0.1、532.23、-3.7都是浮点数。 你也可以在变量中存储字符串,字符串就是由字符组成的序列,可以是一个或多个字符,甚至可以没有字符,即空字符串。 使用引号定义字符串,使其与其他变量相区别。如7是一个数字,而“7”则是一个字符串,这个字符串由一个字符7组成。 在别的编程语言中,你可能需要在程序的开头部分提前定义程序中要用到的变量的具体类型,但在ActionScript中不需要预先声明变量,你只需要直接使用它们,Flash在第一次遇到它们的时候会自动为它们创建变量。 另外,变量所能存放的数据类型也没有严格的限定,某一变量可以在一个位置存放字符串,而在另一个位置存放数字。 这种灵活性并不是经常用得到,但是它可以让程序员们少一些不必要的担心。 ActionScript程序员不必担心的另一个问题是废弃变量的空间回收问题。即当你不再需要使用一个变量的时候,你可能需要收回该变量占用的存储空间。大多数现代的计算机语言如ActionScript都可以自动回收空间,所以你也不必担心了。 除数字和字符串类型外还有一些别的变量数据类型。例如,数组可以存放一系列的数据而非单个数据。 3.1.3 条件 程序本身并不能作出抽象的决定,但是它可以获取数据,并对数据进行分析比较,然后根据分析结果执行不同的任务。 例如,你想要检查用户输入的名字并确定其至少包含3个字母。程序需要做的事情就是对用户名作出判断,如果是3个或更多的字母,就执行一种操作;如果不足3个字母则执行另一种操作。 这里,作出一个决定需要两步,第一步是检查条件是否满足,如果名称符合3个字母长度,条件满足,我们称条件的值为真(true);否则条件不满足,我们称条件的值为假(false)。所有的条件都必须是两个值中的一种,要么为真,要么为假。要么为真(true)要么为假(false)的数据类型称为布尔(boolean)类型。 决定的第二步是根据条件为true或为false的情况选择要执行哪些代码。有时只有一个选项,当条件为true时执行该选项;如果条件为false,将不执行任何代码。有时会有两个相对的选项,条件为true和false时分别执行不同的代码。 例如,你想让计算机根据一个变量的值是1、2或3执行3种不同的任务,可以像这样表达: 如果变量的值等于1,执行命令1 如果变量的值等于2,执行命令2 如果变量的值等于3,执行命令3 条件总是建立在比较之上的,你可以比较两个变量的值以判断它们是否相等;或者判断一个是否大于另一个,或是小于另一个。如果变量是字符串类型,你可以比较它们按字典顺序排列时的先后次序。 3.1.4 循环 与人不同,计算机很适合做重复性的工作。一件事情仅仅重复几次就可能使人厌倦,但是让计算机重复执行成千上万次它都照样有耐心。 循环在每种编程语言中都是一个很重要的部分,ActionScript也不例外。你可以指定一条指令执行给定的次数,或者令其执行到满足指定的条件为止。 事实上,条件是循环中的重要组成部分,整个循环只需要一个开始点,一个结束点,再加上一个标志循环结束的条件。 例如,你需要循环10次,使用一个变量从0开始计数。每循环一次,计数加1。当计数变量达到10时,循环结束,程序继续执行循环以后的部分。下面的内容代表了一个标准的循环结构: (1)循环以前的命令。 (2)循环开始,计数变量置0。 (3)循环中的命令。 (4)计数变量加1。 (5)如果计数变量小于10,执行步骤(3)。 (6)循环以后的命令。 在上面的步骤中,步骤(1)只执行1次,步骤(2)表示循环的开始,步骤(3)、(4)、(5)都将执行10次,当循环结束后,执行步骤(6)及以后的部分。 3.2 ActionScript之一角 当你在编写自己的脚本时,你会用到各种各样不同的关键字和符号,为便于你熟悉脚本的构成,下面先来看一个真实的例子。 这是一段作用于按钮的脚本,当用户单击按钮时(确切地说是松开按下的按钮时)执行它。其中没有包含特殊的函数,但是它体现了ActionScript的主要结构。 on (release) { var myNumber = 7; var myString = "Flash MX ActionScript"; for (var i=0; i&myN i++) { trace(i); if (i + 3 == 8) { trace(myString); } } } 脚本的第1行表明当用户松开按下的按钮时执行大括号中的语句。on (release)结构只能用于按钮,其他相关的几种用法如on(press)、on(rollOver)、on(rollout)、on(dragOver)、on(dragOut)等。 第1行末尾的大括号{表示一段相对独立的代码段的开始。从{到与之相对的}之间的代码是一个整体,它们都从属于按钮的release事件。 请注意,大括号之后的代码较之第1行有一个制表符(按一次Tab键)的缩进,其后的每行代码与之具有相同的缩进程度,直到一个新的大括号开始,在新大括号后的语句会比前面的语句增加一个制表符的缩进,以此类推,这种特点与其他编程语言是类似的。Flash会自动将你添加的代码设置成正确的缩进样式。 代码的第1行创建一个名为myNumber的局部变量,并将该变量的值设置为7。下面一行将字符串Flash MX ActionScript赋给另一个变量myString。稍后我们会更详细的介绍变量的两种类型:局部变量和全局变量。 分号;表示一条指令的结束,在每个完整指令的末尾都应该添加分号。 for代表一个循环结构的开始,此处的循环执行7(myNumber)次,即令i从0递增到6,每递增1便执行一次循环结构中的语句。for后面大括号中的部分即为循环体。 命令trace将它后面括号中的内容发送到输出窗口。我们将在下一部分详细介绍输出窗口。 if是一种条件结构,它测试后面的内容i + 3 == 8是否为true,如果为true,则执行后面的语句;否则跳过该代码段。 if结构中只有一个trace命令,它将变量myString的值发送到输出窗口。 上例脚本以三个反向大括号}结束,第1个表示if语句的结束,第2个表示for语句的结束,第3个表示整个on(press)段结束。 3.3 输出窗口 输出窗口是只在测试Flash影片时出现的一个编程工具,Flash用它来显示出错信息或其他的一些重要信息。用户可以用ActionScript中的trace命令自定义要发送到输出窗口中的信息。 输出窗口在测试程序时非常有用。你可以使用trace命令在输出窗口中显示变量的值或者哪一部分ActionScript正在执行。 输出窗口还可以帮助你学习ActionScript。你可以编写一些小程序,将信息发送到输出窗口,这将帮助你看到程序的运行结果。 要想熟悉输出窗口,最好的方法就是多使用它。下面就来编写一段小程序,将信息发送到输出窗口。 (1)启动Flash MX。 (2)选中时间轴的第1帧,打开第1帧的动作面板。 (3)使用右上角的菜单将动作面板切换到专家模式。 (4)在脚本编辑区单击鼠标,将鼠标光标定位到脚本编辑区中。 (5)在动作面板中输入如下ActionScript: trace("I like ActionScript!"); (6)按Ctrl+Enter键测试影片,因为舞台中没有任何图像,所以你将看到一个空白窗口,同时出现一个输出窗口,窗口中显示:I like ActionScript!如图3-2所示。 输出窗口显示了trace命令中的信息 和动作面板一样,输出窗口右上角也有一个下拉菜单,其中包含了拷贝、清除、查找、保存到文件以及打印等命令。下拉菜单的最后一项命令是“调试级别”,你可以选择“错误”、“警告”、“详细”中的一种,如果选择“无”,将不显示任何信息。 3.4 ActionScript基本语法 前面介绍了程序的基本结构,下面要讲解ActionScript中的基本语法。 3.4.1 变量 1.设置变量 在ActionScript中使用变量的方法很简单,你只需要为变量名分配一个值,例如: myVariable = 7; 该例在创建名为myVariable的变量的同时将其值设置为7,你可以为变量任意取一个名字,而并不需要使用本例中的myVariable。 可以使用输出窗口查看变量的值,如在一个空白影片第一帧的动作面板中添加如下ActionScript: x = 7; trace(x); 首先,数字7被存储在变量x中;然后,使用trace命令将变量x的值发送到输出窗口。影片播放时,输出窗口中会显示数字7。 2.全局变量 根据变量作用的范围不同可将变量分为全局变量和局部变量。 全局变量就是可以作用在整个Flash影片的所有深度级别上的变量。你可以在某一帧中设置它,并在其他帧中使用和改变它的值。 你不需要使用特别的方法创建全局变量,像前一个例子一样,直接设置并使用它,它自动成为一个全局变量。 在许多编程语言中,全局变量可以在任何地方使用。Flash影片使用一个概念叫层级(level)。整修影片的主时间轴作为根(root)层级,影片剪辑是时间轴中的小影片。影片剪辑中的图形和脚本要比根层级低一个级别。影片剪辑不能直接使用根层级中的全局变量。 3.局部变量 局部变量只能存在于当前脚本中,而在其他帧中它将不再存在。你可以在使用同一个变量名在不同的帧中创建不同的局部变量,它们之间将互不影响。 局部变量可用来创建模块化的代码。当前脚本执行完时,局部变量将被从内存中删除;而全局变量将保留到影片结束。 创建局部变量需要使用关键字var。例如,下面的ActionScript创建值为15的局部变量myLocalVariable: myLocalVariable = 15; 使用var创建局部变量后,在当前代码中就不再需要使用关键字var了。例如,下面的代码创建值为20的局部变量myLocalVariable,然后将其值改为8,再发送到输出窗口中。 var myLocalVariable = 20; myLocalVariable = 8; trace(myLocalVariable); 如果没有特殊的需要,请尽量使用局部变量。 3.4.2 比较 在ActionScript中比较两个事物是很容易的,要进行比较可以使用标准的数学符号,如=、&、&等。 1.相等 在ActionScript中用比较运算符对两个值进行比较。 要比较两个值是否相等,可以使用连在一起的两个等于符号(==)。单个等于符号(=)是用来为变量分配值的,并不是比较运算符。 如果要比较变量x的值是否等于7,就可以使用==符号,如下所示: var x = 7; trace(x == 7); 以上代码使用=符号将变量x设置为7,然后使用==符号对x和7进行比较。 测试这两行代码,输出窗口将显示“true”。如果将x设置为8或其他数,则会显示“false”。 ==符号还可以用来比较两个字符串。如下所示: var myString = "Hello ActionScript."; trace(myString == "Hello ActionScript."); trace(myString == "hello ActionScript."); 程序运行时,你将在输出窗口中看到一个“true”和一个“false”,因为在字符串中字母是要区分大小写的。 如果你要比较两个值是否不等,可以使用!=符号,它的意思是“不等于”。如下所示: var a = 7; trace(a != 9); trace(a != 7); 第1个trace语句显示信息“true”,因为a确实不等于9;第2个trace语句显示信息“false”。 2.小于和大于 使用标准的数学符号&和&比较两数是否成小于或大于关系。举例如下: var a = 9; trace(a & 10); trace(a & 5); trace(a & 1); 你将从输出窗口中看到“true”、“true”和“false”。 符号&=或&=用于比较一个数是否小于等于或大于等于另一个数,如下所示: var a = 9; trace(a &= 9); trace(a &= 9); trace(a &= 7); 以上3个trace语句都将显示“true”。 3.4.3 运算 通过运算可以改变变量的值。分别使用算术运算符+、-、*、/执行加、减、乘、除操作。 如下所示的ActionScript将值为9的变量x加上一个数7: var x = 9; x = x + 7; trace(x); 运算结果为16。 在ActionScript中执行运算可以使用一些简写方法,如+=运算符将其前后的值相加并将结果赋给它前面的变量。前面的脚本也可以写成如下的形式: var x = 9; x += 7; trace(x); ++运算符与+=运算符类似,但它每执行一次,变量的值只增加1,如下面的例子: var x = 9; x++; trace(x); 结果显示10。再看下面的例子: var x = 9; trace(x++); trace(x); 结果是9和10。为什么呢?因为第1个trace语句输出x的当前值9,然后将x加1,输出x的新值10。 再试一下下面的脚本: var x = 9; trace(++x); trace(x); 这次的结果为两个10。因为将++运算符置于变量前面,将先执行运算再返回变量的值。 同理,--运算符执行递减操作,-=运算符在变量当前值的基础上减去一个数,*=运算符在变量当前值的基础上乘上一个数,/=运算符在变量当前值的基础上除以一个数。 3.4.4 条件 既然现在你已经知道如何比较两个变量,你就可以将比较结果作为执行某些语句的条件。 1.if语句 if语句使你可以使用比较结果控制Flash影片的播放。如下所示的语句判断X是否等于9,如果比较结果为true,则让影片跳到第15帧: if (x == 9) { gotoAndPlay(15); } if语句以if开始,其后紧跟一个比较表达式,比较表达式通常用一对括号括起来,再后面即是用大括号括起来当比较结果为true时要执行的代码。 2.else 对if语句可以进行扩展,使用else执行条件不成立(比较表达式为false)时的代码,如下所示: if (x == 9) { gotoAndPlay(15); } else { gotoAndPlay(16); } 你也可以使用else if语句将if语句更推进一步,如下所示: if (x == 9) { gotoAndPlay(15); } else if (x == 10) { gotoAndPlay(16); } else if (x == 11) { gotoAndPlay(20); } else { gotoAndPlay(25); } 你可以让if语句想要多长就有多长,你也可以使用else if语句对别的变量进行比较,如下所示: if (x == 9) { gotoAndPlay(15); } else if (y&20) { gotoAndPlay(16); } else { gotoAndPlay(25); } 3.复合比较 你可以在一个if语句中对几个比较表达式的值进行判断,比如说你希望在x为9并且y为20时跳转到第10帧,可以使用如下所示的脚本: if ((x == 9) && (y == 20)) { gotoAndPlay(10); } 逻辑与运算符&&将两个比较表达式联接在一起成为一个复合表达式,当两个表达式的值都为true时复合表达式的值才为true。每个比较表达式都需要添加独立的括号以便Flash能正确识别。在Flash的早期版本中使用and执行逻辑与运算,现在已推荐不使用。 你也可以使用逻辑或运算符||将两个比较表达式联接在一起成为一个复合表达式,只要有一个表达式的值为true,复合表达式的值就为true。如下所示: if ((x == 7) || (y == 15)) { gotoAndPlay(20); } 在该脚本中,只要x为7或者y为15,或者两者都成立,结果都是跳转到第20帧。只有当两者都不成立时,才不会执行gotoAndPlay命令。在Flash的早期版本中使用or执行逻辑或运算,现在已推荐不使用。 3.4.5 循环 ActionScript中的循环要比if语句稍微复杂一点。它的循环结构与C语言中的循环结构几乎是一致的。 1.for循环结构 for结构是主要的循环结构,其样式如下所示: for (var i = 0; i&10; i++) { trace(i); } 运行这段代码,随着局部变量I的改变,输出窗口中将显示数字0~9。 for结构中关键字for后面的括号中包含3个部分,它们之间用分号隔开。 第1部分声明一个局部变量,在本例中创建了一个局部变量i并将其设置为0。该部分只在循环体开始执行之前执行一次。 第2部分作为一个供测试的条件,在这里,测试i是否小于10。只要满足该条件,就会反复执行循环体。循环开始的时候i等于0,它是小于10的,所以循环得以执行。 第3部分是一个运算表达式,每完成一次循环都将执行该表达式一次。在这里,i每次递增1,然后转到第2部分对i的新值进行判断。 大括号中的部分是该循环的循环体,每执行一次循环都将执行其中的所有命令。我们来看看计算机是如何处理这个循环的。 声明变量i并将其值设为0; 判断条件i&10,结果为true,开始执行循环体; 现在i值为0,trace命令将i值发送到输出窗口,输出窗口显示0; 第1次循环结束,回到循环开始处,i在原来的基础上递增1,i值变为1; 判断条件i&10,结果为true,继续执行循环体; trace命令将i的值1发送到输出窗口; 然后i再加1,这样循环下去直到执行完10次循环; 回到循环开始处,i在原来的基础上递增1,i值变为10; 判断条件i&10,结果为false,结束循环,开始执行for结构后面的代码。 2.其他形式的循环结构 for循环是最常用的一种循环结构,除for循环之外还有while循环和do…while循环。 while循环的例子如下所示: i = 0; while (i != 10) { trace(i); i++; } while循环看起来似乎要比for循环简单一些,从结构上看甚至与if语句还有一些相似。只要while后面括号中的条件成立,循环就会一直进行下去,所以在while循环体中需要有改变条件的语句,以使条件最终能够为false,完成循环,如上例中的i++。 与while循环相似的是do…while循环,如下所示: i = 0; do { trace(i); i++; } while (i != 10); 除了测试条件的位置不同,while循环和do…while循环几乎是一样的。while循环在循环体之前测试条件,do…while循环在循环体之后测试条件,所以do…while循环至少要执行一次,而while循环有可能一次也不执行。 3.跳出循环 所有的循环结构都可以使用两个命令改变循环的执行流程,一个命令是break,另一个命令是continue。break命令终止循环,并跳到循环结构后面的语句处执行;continue命令终止本轮循环但不跳出循环,进而执行下一轮循环。 使用break和continue的例子都比较复杂,另外,还有一种特殊的for…in循环结构,在用到它们的时候我们再详细讲解。 3.4.6 函数 到现在为止,我们都是将脚本放在影片的第1帧中。如果程序相当复杂,再放在同一帧中就使脚本显得太庞大了。 函数使你可以组织需重用的代码,并放在时间轴中,例如: function myFunction(myNum) { var newNum = myNum+5; return newN } 函数以关键字function开头,function后面是函数名。与变量名相似,你可以指定自己的函数名,最好将函数名取得有意义一些。 函数名后面的括号容纳该函数的参数,所谓参数也是一个变量,它的值在调用该函数时予以指定。一个函数可以有若干参数,也可以没有参数。无论有没有参数,函数名后都应紧跟一对括号。 大括号中的部分是函数体,在函数体中创建了一个局部变量newNum,将myNum加5的结果设置为newNum的值。如果你将10作为参数传递给该函数,newNum的值就是15。 return命令仅用于函数中,使用return结束一个函数并返回函数值。此处,newNum是用return命令返回的函数值。 要使用函数,就需要调用它,如下所示: var a = myFunction(7); 该语句创建一个新的局部变量a,将7作为参数调用函数myFunction,并将函数返回的结果作为变量a的值。 被调用的函数开始运行,创建一个局部变量myNum,将7作为myNum的值,然后执行函数体内的代码,使用return命令将newNum的值12返回给函数的调用者。这时,a的值变为12。 函数最大的作用体现在它可以重复使用。如下所示的3行代码产生3个不同的结果: trace(myFunction(3)); trace(myFunction(6)); trace(myFunction(8)); 运行以上代码,你将得到结果8、11和13。 使用函数还有一个好处就是可以只改变函数中的一处,从而影响所有调用该函数的命令。例如,将函数myFunction中的var newNum = myNum+5改成var newNum = myNum+7,上面3个调用该函数的命令的结果将变成10、13和15 3.4.7 点语法 ActionScript中一个很重要的概念是点语法。点语法也是很多面向对象的编程语言中用来组织对象和函数的方法。 假设你想求一个数的绝对值,Flash中有一个内置的绝对值函数,它包含在ActionScript的“对象”/“核心”/“Math”/“方法”中。要使用绝对值函数,首先要使用对象名,即Math,然后是方法名abs,它们之间用符号“.”隔开,具体表示方法如下所示: var a = Math.abs(-7); 点语法的另一个用途是指定影片剪辑的属性。如下面的语句将影片剪辑myMC的_alpha(透明度)属性设置为50%: myMC._alpha = 50; 你还可以在影片剪辑中使用点语法定位根(root)中的一个全局变量。如果你在主时间轴中创建了一个全局变量globelVar,而要在影片剪辑中使用这个全局变量,可以使用如下的语句: trace(_root.globleVar); 如果你现在对对象、影片剪辑属性、层级之类的概念还不熟悉,不用着急,在以后的内容中我们将对它们进行更深入的讲解。 3.4.8 注释 我们可以在Flash的动作面板中添加注释,注释就是程序中并不参与执行的那些代码。它可以用来提醒你某些代码的作用,方便你组织和编写脚本。一个注释的例子如下所示: // 将影片剪辑myMC的透明度设置为50% myMC._alpha = 50; 该例的第1行是注释,注释以双斜线//开头,在//后面你可以输入任意的文本和符号,Flash会自动将注释部分用灰色标示。 上例是将注释专门放在一行中,你也可以将注释放在一行代码的后面,如下所示: myMC._alpha = 50; // 将影片剪辑myMC的透明度设置为50% 只要使用//符号,Flash就会忽略它后面的部分。 3.5 调试脚本 无论在编写程序时有多么细心,每个程序员都避免不了要调试程序。要学好ActionScript,你就得熟练掌握调试程序的方法。在Flash MX中调试程序有3种方法:逻辑推断、向输出窗口发送信息和使用脚本调试器。 3.5.1 逻辑推断 许多程序错误其实很简单,也很容易解决,并不需要专门的调试工具。当程序出现错误时,你应对错误出现在哪里有一个大致的把握。 就算你不知道问题出在哪里,但通过细心阅读代码,你也有可能找到它。你可以思考一下,你要实现的效果是什么?现在的效果与你的设想有多大差距?是什么原因造成了这种差距?修改哪些部分有望改正这种错误?经过反复思考、修改和调试,你对程序的理解就会不断加深,你的程序也会越来越趋于正确。 没有人比你更了解你自己的程序,所以对你来说,你编写的程序最先宜采用逻辑推断的方法进行调试。还有一些错误或漏洞隐藏得比较深,这就需要借助于调试工具。 3.5.2 输出窗口 输出窗口是一个简单而实用的调试工具,在程序中可以使用trace命令将特定的信息发送到输出窗口中,这些信息可以帮助你了解代码的运行情况。 前面我们已经介绍过输出窗口,这里就不再赘述了。 3.5.3 调试器 调试器是一个更专业的调试工具,它是Flash MX中的一个窗口,通过调试器可以查看影片中的各种数据以及ActionScript代码的运行情况。 选择“控制”→“调试影片”命令,或按快捷键Ctrl+Shift+Enter,开始调试影片。与测试影片不同的是,调试影片时多了一个调试器窗口调试器窗口中包含很多窗格,在左边的窗格中可以检查Flash影片中不同类型的对象,右边的窗格显示影片中所有的ActionScript。 在调试器窗口中可以设置断点,断点即是为某行代码添加的一个标记,当调试影片时,影片会自动在断点处停止,允许你查看当前包括变量值在内的的影片状态。使用断点可以使你逐行地执行代码,对每行代码的运行结果进行观察和分析。 初学ActionScript的时候,你可能并不需要使用调试器;但是当你成长为一名经验丰富的程序员时,你就会发现它对你是非常有用的。
第4章 影片播放控制
控制影片播放流程的命令有许多,如下所示: stop:使影片停止在当前时间轴的当前帧中。 play:使影片从当前帧开始继续播放。 gotoAndStop:跳转到用帧标签或帧编号指定的某一特定帧并停止。 gotoAndPlay:跳转到用帧标签或帧编号指定的某一特定帧并继续播放。 nextFrame:使影片转到下一帧并停止。 prevFrame:使影片回到上一帧并停止。 stop命令常常用在帧动作中,以使影片停止并等待用户控制。其他命令常常用在按钮的事件处理函数中。
4.1 使影片停止 最简单的ActionScript恐怕要算stop命令了,当执行stop命令的时候,影片在当前的帧处停止播放。 你可以将stop命令放到时间轴的某一关键帧中,在stop后面需要紧跟一对括号,如下所示: stop(); 执行stop命令时,影片只是暂停在当前帧,在影片中嵌入的影片剪辑或图形元件继续播放,停止的仅仅是主时间轴中的动画。 要让影片继续播放,需要用到ActionScript的另一个命令play。play命令使影片转到下一帧并继续播放。 我们将在按钮部分介绍play命令,下面以一个例子的形式介绍stop命令的使用,其操作步骤如下: (1)启动Flash MX,在时间轴中插入两个空白关键帧,使时间轴包含3个空白关键帧。 (2)在3个关键帧中使用文本工具分别添加字符1、2、3。 (3)选中第2帧,按F9键打开动作面板,在其中添加如下的ActionScript: stop();(4)按Ctrl+Enter测试影片,影片播放到第2帧即停止,你将看不到第3帧。 4.2 跳转到指定帧 另一个基本的ActionScript命令是gotoAndPlay。该命令使影片从当前帧跳转到指定的任意一帧。可以用帧编号或帧标签指定一帧,如下所示: gotoAndPlay(9); gotoAndPlay("myFrame"); 如果影片中不止一个场景,你也可以指定要跳转到的特定场景的特定帧。如果gotoAndPlay命令中只有一个参数,Flash将认为它代表某个帧;如果有两个参数,第1个参数将作为场景名,第2个参数代表该场景中的帧。如下所示: gotoAndPlay("myScene", 1); 它表示跳转到场景myScene的第1帧继续播放。 gotoAndPlay命令使影片跳转到某一特定帧并从该帧开始继续播放,如果要使影片跳转到某一特定帧并在该帧位置停止,就应该使用gotoAndStop命令。它的使用方法与gotoAndPlay命令相似,仅仅是跳转帧后执行的动作不同罢了。 还有两个实现跳转帧动作的命令,它们是nextFrame和prevFrame。nextFrame命令使影片从当前位置转到下一帧并停止,prevFrame命令使影片从当前位置转到上一帧(即回退一帧)并停止。它们后面都必须使用括号。 要了解这些命令究竟如何使用,最好的方法就是使用按钮,下面我们就来看看如何创建按钮。 4.2.1 创建按钮 要创建按钮,可以选择“插入”→“新建元件”命令或按快捷键Ctrl+F8,你将看到一个“创建新元件”对话框,在该对话框中你可以在影片剪辑、按钮和图形这3种类型中选择要创建元件的类型。 选择按钮类型,单击“确定”按钮,Flash窗口将由主场景切换到按钮元件的编辑场景。按钮元件的时间轴中有4个帧,分别是弹起(Up)、指针经过(Over)、按下(Down)、和点击(Hit),它们代表了按钮的3种状态和热区(热区的形状代表了按钮能在什么范围内感应到鼠标的动作)。 如果你在按钮的第1帧中放置一个图形,而在其他3个帧中不放置任何东西,那么该按钮的3种状态和热区将是一样的。 要使按钮显示不同的状态,就需要在它的不同关键帧中创建不同的图形或影片剪辑。完成对按钮的创建后,可以单击舞台上方的场景名“场景1”回到主场景。 按F1或Ctrl+L打开库面板,你将看到库中增加了一个按钮,用鼠标将它拖到舞台中。 4.2.2 为按钮添加脚本 要为按钮添加脚本,首先得选中该按钮,然后按F9键打开动作面板。你也可以在该按钮上单击鼠标右键,在弹出的快捷菜单中选择“动作”命令,这样也可以打开按钮的动作面板。 在专家模式下输入如下脚本: on (release) { trace("You are cliking me!"); } 按钮的脚本有特殊的语法,即必须以关键字on开头,以on开头的代码是一种事件处理函数,即当特定事件发生时要执行的代码。在这里,特定事件就是release(松开鼠标),它是按钮最常用的事件。 按钮事件还有press、releaseOutside、rollOver、rollOut、dragOver、dragOut以及keyPress等。press是按下鼠标事件,它在release事件之前发生,releaseOutside是在按钮上按下鼠标,并且在按钮外松开鼠标的事件,rollOver是鼠标指针移到按钮所在热区的事件,rollOut是鼠标从按钮热区移出的事件,dragOver是在鼠标指针位于按钮上方并已按下按钮的情况下,滑出按钮再滑回按钮的事件,dragOut是当鼠标指针位于按钮内部,按下按钮然后滚动出按钮区域的事件,keyPress是按钮响应在键盘上按下某些键时的事件。 某种事件的发生,会触发相应事件处理函数开始运行,上例中使用trace语句将事件信息发送到输出窗口中,使你可以更好地了解具体按钮事件的含义。 4.3 练习:演示文档 用Flash可以实现演示文档的功能,演示文档相当于我们常说的幻灯片,它可以进行逐页展示。如果不使用脚本,Flash动画会很快地播放每一帧,要用Flash制作演示文档就得对Flash添加控制命令。 我们用脚本使每一帧停止,要跳转到别的帧,就需要使用按钮。 制作演示文档的操作步骤如下: (1)启动Flash MX,编辑前5帧。 (2)在文档中创建5个按钮,从库面板中可以看到它们。 (3)打开主时间轴第1帧的动作面板,其中添加了如下语句: stop(); 影片播放时,会停止在第一帧上。 (4)为图层2的第1帧和第5帧分别添加帧标签begin和end,(5)选中第1帧中的“开始”按钮,打开其动作面板,在其中添加如下语句: on (release) { nextFrame(); } 单击“开始”按钮,停止在第1帧的影片会跳转到第2帧并停止。 (6)分别在第2~4帧的相同位置添加按钮“首页”、“上一页”、“下一页”、“末页”。由于第5帧后面没有别的帧,所以只添加“上一页”和“首页”两个按钮。 (7)为所有“首页”按钮添加脚本: on (release) { gotoAndStop("begin"); } 单击“首页”按钮,影片将跳转到帧标签为begin的那一帧并停止,即第1帧。这里也可以用1替代"begin"。 (8)为所有“上一页”按钮添加脚本: on (release) { prevFrame(); } 单击“上一页”按钮,影片将从当前帧跳转到前一帧并停止。 (9)为所有“下一页”按钮添加脚本: on (release) { nextFrame(); } 单击“下一页”按钮,影片将从当前帧跳转到下一帧并停止。 (10)为所有“末页”按钮添加脚本: on (release) { gotoAndStop("end"); } 单击“末页”按钮,影片将从当前帧跳转到帧标签为end的那一帧并停止,在此处也即是第5帧。 (11)按Ctrl+Enter键测试一下影片,单击各个按钮试一下效果。这些添加了ActionScript的按钮是不是变得非常听话?
第5章 控制影片剪辑
影片剪辑是Flash中最重要的一种元件,对影片剪辑的控制是ActionScript的最重要功能之一。从根本上说,Flash的许多复杂动画效果和交互功能都与影片剪辑的运用密不可分。 使用点语法或方括号可以定位影片剪辑。使用方括号时可以使用由变量表示的影片剪辑实例名,这是它相对于点语法的优点。 可以用脚本控制影片剪辑的各种动作,也可以在影片剪辑的事件处理函数中控制主时间轴和别的影片剪辑。影片剪辑最重要的两个事件是load和enterFrame。
5.1 控制影片剪辑的播放动作 设想一个Flash动画,它的主场景中只有一个帧,舞台中只有一个影片剪辑,影片剪辑中并没有ActionScript。如何才能控制影片剪辑的播放动作呢? 要控制一个影片剪辑,首先应该为影片剪辑命名。容易混淆的是,库面板中的影片剪辑本身有一个名称,这里要命名的是场景中影片剪辑实例的名称。它们可以相同,也可以不相同。如果你在场景中创建了同样的影片剪辑的多个实例,那么就需要将每个实例以不同的名称命名,才能用ActionScript对每一个实例进行控制。如果不需要对影片剪辑进行控制,也就不需要为影片剪辑的实例命名。 从本例文件中,你将看到库面板中只有一个影片剪辑rollmc,场景中创建了一个rollmc的实例。你还可以再从库中拖出若干个rollmc的实例将它们放置到场景中。 选中场景中影片剪辑rollmc的实例,打开属性面板,可以看到它被命名为roll,你同时可以看到该影片剪辑原来的名字rollmc。你也可以为它指定别的名称,也可以是rollmc,Flash并不会混淆它们之间的区别。 实例名称可以在程序中用来指代该影片剪辑实例,如果要控制该实例,就需要在脚本中使用该名称。下面,我们就来看看如何通过脚本控制影片剪辑实例roll。 分别选中场景中的4个按钮,打开它们的动作面板,查看其中的代码。 “STOP”按钮: on (release) { roll.stop(); } 单击“STOP”按钮使roll实例停止播放。 “PLAY”按钮: on (release) { roll.play(); } 单击“PLAY”按钮使roll实例继续播放。 “PREV”按钮: on (release) { roll.prevFrame(); } 单击“PREV”按钮使roll实例回退一帧并停止。 “NEXT”按钮: on (release) { roll.nextFrame(); } 单击“NEXT”按钮使roll实例播放一帧并停止。 按Ctrl+Enter键测试影片,如图5-2所示。一开始影片剪辑自动播放。单击不同的按钮看看影片剪辑是否执行相应的动作。除了这几种命令,你还可以使用gotoAndStop或gotoAndPlay命令控制影片剪辑跳转到具体的帧,但是在命令前面都需要指定影片剪辑的实例名称。 这种方法是在影片剪辑实例所在的层级中控制影片剪辑,如果是在影片剪辑内部,要控制它自身的播放,就可以直接使用stop、play等命令,而不需要指定实例名称。如果你在影片剪辑内部的时间轴中使用了名称roll,Flash会在影片剪辑内部的时间轴中寻找该实例。 5.2 定位影片剪辑 我们已经了解了如何使用最简单的方法定位一个影片剪辑,即使用影片剪辑的实例名,后面紧跟一个点记号“.”,然后是你想要影片剪辑执行的命令。 还有许多方法可以定位影片剪辑。首先,我们来看看如何定位Flash影片中不同层级的对象。 Flash影片中最基本的目标层级就是它的主时间轴。可以用关键字_root来表示和定位主时间轴。 例如,你要向主时间轴发送一个gotoAndStop命令,可以使用如下所示的语句: _root.gotoAndStop(9); 如果这个命令是包含在主时间轴的某一帧上的,则可以省略目标_root。如果这个命令是包含在主时间轴上某个影片剪辑中,需要由影片剪辑来控制它上一级的主时间轴,_root就很有必要了。 通常,要定位包含某一对象的上一级对象,可以使用关键字_parent。所以,如果一个影片剪辑是包含在主时间轴中,在影片剪辑中使用_parent和_root的效果是一样的。如果影片剪辑与主时间轴相差两个层级,即当影片剪辑包含在另一个位于主时间轴中的影片剪辑中,这时在该影片剪辑中使用_parent指代的是它上一级的影片剪辑,而_root是指它上两级的主时间轴。在主时间轴中不能使用_parent,因为主时间轴没有上一级。 可以用数字来方便地说明这种层级关系。主时间轴,它始终是最初级,作为层级0。主时间轴中的一个影片剪辑处于层级1。如果影片剪辑中包含另一个影片剪辑,它处于层级2。对层级2上的影片剪辑来说,_parent指代的就是层级1上的影片剪辑,而不管对哪一级来说,_root始终指代层级0上的主时间轴。 除了用点记号连接_root和实例名,还可以使用方括号表示_root上的对象。对上例中的按钮“STOP”来说,如下所示的3种方法作用是一样的: rool.stop(); _root.roll.stop(); _root["roll"].stop(); 还有一个关键字this,它代表脚本当前所在的层级。如果脚本位于主时间轴中,this即指代主时间轴;如果脚本位于影片剪辑中,this即指代该影片剪辑。所以以上语句还可以用以下两种方式表示: this.roll.stop(); this["roll"].stop(); 使用_root和this时还可以用变量来定位影片剪辑,如下所示: var mcInsName = "roll"; _root[mcInsName].stop(); 今后我们会遇到这种情况,即有roll0~rool99共100个影片剪辑实例,可以使用下面的语句来控制它们: on (release) { for (var i = 0; i&100; i++) { _root["roll"+i].stop(); } } 多数情况下我们习惯使用_root,但在某些情况下使用this比_root更简便。如要在某个影片剪辑中定位包含 在此影片剪辑中的另一影片剪辑childMC,就可以直接使用this.childMC。 5.3 为影片剪辑添加脚本 现在你已经知道如何向帧和按钮中添加脚本,下面需要知道如何向影片剪辑中添加脚本。 要为影片剪辑添加脚本,首先要选中影片剪辑,再打开它对应的动作面板,然后在其中输入脚本。影片剪辑脚本和按钮的脚本类似,它们都使用事件处理函数,与按钮的on关键字不同,影片剪辑使用onClipEvent关键字。当某种影片剪辑事件发生时,就会触发相应的事件处理函数。 影片剪辑最重要的两种事件是load和enterFrame。 load事件在影片剪辑完全加载到内存中时发生。在每次播放Flash影片时,每个影片剪辑的load事件只发生一次。 在主时间轴停止播放时,影片中的影片剪辑并不会停止播放,这个特性决定了影片剪辑的另一个事件enterFrame的重要性。enterFrame事件在影片每次播放到影片剪辑所在帧时发生。如果主时间轴中只有一帧,且不论它是否在该帧停止,该帧中的影片剪辑都会不断触发enterFrame事件,且触发的频率与Flash影片的帧频一致。 影片剪辑事件的使用方法如下所示: onClipEvent (load) { var i = 0; } onClipEvent (enterFrame) { trace(i); i++; } 当影片剪辑的load事件发生时,将变量i设置为0。当影片剪辑的enterFrame事件发生时,向输出窗口中发送i的值,然后将i加1。输出窗口中会从0开始输出以1递增的数字序列,直到影片被关闭为止。 为了熟悉影片剪辑事件处理函数的用法,我们来为影片剪辑编写一段简单的脚本,使影片剪辑逆序播放, 我们将从影片剪辑的最后一帧处开始播放,使用prevFrame命令使影片剪辑每次后退一帧。 本例文件场景中有一个影片剪辑元件rollmc,查看一下它的属性面板,并没有为其实例命名,这是因为我们要直接在影片剪辑的动作面板中添加脚本,并不需要用到实例名称。 选中影片剪辑rollmc,此时动作面板的标题栏中应为“动作-影片剪辑”。打开动作面板,其中添加了如下ActionScript: onClipEvent (load) { gotoAndStop(40); } onClipEvent (enterFrame) { prevFrame(); } 在事件处理函数onClipEvent (load)中,令Flash影片的播放头转到影片剪辑的第40帧(即最后一帧)。这个事件处理函数只在影片剪辑被加载完成时执行1次。第2个事件处理函数onClipEvent (enterFrame)每播放1帧就执行1次,使影片剪辑回退1帧。 按Ctrl+Enter键测试影片,你将看到齿轮以与上例相反的方向转动,直到影片剪辑的时间轴回到第1帧,prevFrame命令不起作用,影片剪辑停止播放。要让它连续不断的播放,可以在影片剪辑元件rollmc的时间轴第1帧的动作面板中添加如下语句: gotoAndStop(40); 5.4 用影片剪辑控制别的影片剪辑 一个影片剪辑可以控制别的影片剪辑。综合使用_root或_parent关键字、点符号和影片剪辑实例名称可以将命令发送给另一个影片剪辑实例。例如,在主时间轴上的影片剪辑实例roll1中添加如下脚本以控制同在主时间轴上的影片剪辑实例roll2回退1帧: _root.roll2.prevFrame(); 或者使用方括号表示如下: _root["roll2"].prevFrame(); 如果两个影片剪辑不同在主时间轴上,而是同在别的层级上,可以使用_parent关键字。如果它们不同在一个层级上,也只需要使用点符号逐级标明所在的路径即可。 下面综合运用以上知识实现以影片剪辑控制另一个剪辑的播放动作。 (1)打开本例文件。分别查看场景中的每一层。按Ctrl+L打开库面板。库面板中有三个影片剪辑元件,分别是hour、minute和second。 (2)分别双击每个影片剪辑元件,查看它们的时间轴。 (3)second元件的的时间轴共60帧,secondhand图形元件顺时针旋转1周。在第1帧中添加了如下ActionScript: stop(); 在最后1帧中添加了如下ActionScript: _root[target].nextFrame(); gotoAndStop(1); (4)minute元件的的时间轴共60帧,minutehand图形元件顺时针旋转1周。在第1帧中添加了如下ActionScript: stop(); 在最后1帧中添加了如下ActionScript: _root[target].nextFrame(); gotoAndStop(1); (5)hour元件的的时间轴共12帧,hourhand图形元件顺时针旋转1周。在第1帧中添加了如下ActionScript: stop(); (6)回到主场景,在属性面板中为hour影片剪辑和minute影片剪辑指定了与元件名称相同的实例名称。 (7)选中second元件实例,打开其动作面板,其中添加了如下ActionScript: onClipEvent (load) { target = "minute"; } onClipEvent (enterFrame) { nextFrame(); } (8)选中minute元件实例,打开其动作面板,其中添加了如下ActionScript: onClipEvent (load) { target = "hour"; } 以上脚本的原理是:使每个影片剪辑都在各自的第1帧停止。在second的enterFrame事件中令其自身移到下一帧。直到second元件转动完一周,到达最后一帧,使用_root[target].nextFrame();命令将target所指目标后移1帧,这里的target是在second影片剪辑实例的load事件中定义的,也就是minute。同样,直到minute元件转动完一周到达最后1帧,使用_root[target].nextFrame();命令将target所指目标后移1帧,这里的target是在minute影片剪辑实例的load事件中定义的,也就是hour。 由于影片剪辑的转动是由nextFrame命令实现的,所以在每个元件内部时间轴的最后1帧中添加了跳转到第1帧的语句,避免停止在最后1帧上。 上面的ActionScript主要有两种,一种是在影片剪辑内部时间轴上的帧脚本,另一种是在主时间轴中的影片剪辑脚本。我们使用一个全局变量target记录影片剪辑实例名称,这个动作是在影片剪辑的事件处理函数中完成的,然后将这个全局变量应用到影片剪辑内部的帧脚本中。从这里也可以看到,影片剪辑动作和影片剪辑内部的帧动作是可以进行通信的,全局变量在它们之间有效,但在两个影片剪辑之间就变得无效,所以我们可以在两个影片剪辑中同时使用target而互不影响。 (9)按Ctrl+Enter测试影片
第6章 影片剪辑属性 
通过调整影片剪辑的各种属性可以改变影片剪辑的位置和显示状态。_x和_y属性代表影片剪辑在场景中的水平坐标和垂直坐标。_xscale和_width属性决定影片剪辑在水平方向上的显示宽度,_yscale和_height属性决定影片剪辑在垂直方向上的显示高度。使用_rotation属性可以旋转影片剪辑。_alpha属性代表影片剪辑的透明度,_visible属性决定影片剪辑是否可见。使用关键字_xmouse和_ymouse可以获取鼠标光标在屏幕中的坐标位置。
6.1 坐标 Flash场景中的每个对象都有它的坐标,坐标值以像素为单位。Flash场景的左上角为坐标原点,它的坐标位置为0,0,前一个0表示水平坐标,后一个0表示垂直坐标。Flash默认的场景大小为550×400像素,即场景右下角的坐标为550,400,它表示距坐标原点的水平距离为550,垂直距离为400。 场景中的每一点都可以用坐标表示习惯地,水平坐标用x表示,垂直坐标用y表示。在Flash中,分别用_x和_y表示x坐标值属性和y坐标值属性。例如,要在主时间轴上表示场景中的影片剪辑myMC的位置属性,可以使用下面的方法: myMC._x myMC._y 如果是在myMC自身的脚本中表示它的坐标,也以使用如下的方法: _x; _y; 或: this._x; this._y; 在属性面板和信息面板中都有可以查看和更改对象的位置。选择“窗口”→“信息”命令或按快捷键Ctrl+I都可以打开信息面板信息面板中显示了当前所选图形或影片剪辑的大小、坐标位置、颜色以及鼠标位置等。图6-2中信息面板右边的两个数值框X和Y代表了所选对象的水平坐标和垂直坐标。面板中的 图标表示坐标位置是以所选对象的左上角为基准还是以中心为基本。当前左上角方块呈黑色显示,表示坐标位置以对象左上角为基准,如果中心方块呈黑色显示,表示坐标位置以对象中心为基准。 通过更改_x和_y属性可以在影片播放时改变影片剪辑的位置。如可以为影片剪辑编写如下的事件处理函数: onClipEvent (enterFrame) { _x += 5; _y += 5; } 该事件处理函数使影片剪辑在每次enterFrame事件中向右和向下移动5像素的位置。 6.2 鼠标位置 你不但可以获得影片中影片剪辑的坐标位置,还可以获得鼠标位置,即鼠标光标在影片中的坐标位置。 表示鼠标光标的坐标属性的关键字是_xmouse和_ymouse,其中,_xmouse代表光标的水平坐标位置,_ymouse代表光标的垂直坐标位置。 需要说明的是,如果这两个关键字用在主时间轴中,则它们表示鼠标光标相对于主场景的坐标位置;如果这两个关键字用在影片剪辑中,则它们表示鼠标光标相对于该影片剪辑的坐标位置。_xmouse和_ymouse属性都是从对象的坐标原点开始计算的,即在主时间轴中代表光标与左上角之间的距离;在影片剪辑中代表光标与影片剪辑中心之间的距离。 多数情况下,你需要用到鼠标光标在主场景中的位置,所以可以使用_root._xmouse和_root._ymouse表示。 你可以使用下面的代码让影片剪辑保持与鼠标位置相同的坐标值: onClipEvent (enterFrame) { _x = _root._ _y = _root._ } Flash不能获得超出影片播放边界的鼠标位置。这里的边界并不是指影片中设置的场景大小。如将场景大小设置为550×400,在正常播放时能获得的鼠标位置即在(0,0)~(550,400)之间;如果缩放播放窗口,将视当前播放窗口的大小而定;如果进行全屏播放,则与显示器的像素尺寸有关。 6.3 旋转方向 影片剪辑的另一个属性是_rotation。 _rotation属性代表影片剪辑的旋转方向,它是一个角度值,介于-180°~180°之间,可以是整数和浮点数。 _rotation的值始终保持在-180°~180°之间,如果将它的值设置在这个范围之外,系统会自动将其转换为这个范围之间的值。例如,将_rotation的值设置为181°,系统会将它转换为-179°;将_rotation的值设置为-181°,系统会将它转换为179°。 如使用下面的语句实现影片剪辑的连续转动: onClipEvent (enterFrame) { _rotation += 10; } 不用担心_rotation会超出它的范围,系统会自动将它的值转换到-180°~180°之间,并不会影响到影片剪辑转动的连贯性。 6.4 可见性 影片剪辑的另一个属性是_visible,即可见性。_visible属性使用布尔值,即要么为true(1),要么为false(0)。为true表示影片剪辑可见,即显示影片剪辑;为false表示影片剪辑不可见,隐藏影片剪辑。 例如要隐藏影片剪辑myMC: myMC._visible = 6.5 透明度 _alpha(透明度)是区别于_visible的另一个属性,_alpha决定了影片剪辑的透明程度,它的范围在0~100之间,0代表完全透明,100表示不透明。 例如要将影片剪辑myMC的透明度设为50%: myMC._alpha = 50; _alpha属性代表了第4种颜色通道,即所谓的alpha通道。前3种颜色通道分别为red(红)、green(绿)、blue(蓝),也就是我们说的三原色通道,通常也简称R、G、B通道。前3种颜色通道决定像素的颜色成份,alpha通道决定像素的透明程度。在计算机中,每种颜色通道都用8 bit(位)来存储,所以如果一幅图像是32位的,它就有所有这4个通道;如果一幅图像是24位的,则它就}

我要回帖

更多关于 i d like的完全形式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信