Action Script 3.0 练习 控制汽车移动
- 格式:doc
- 大小:325.00 KB
- 文档页数:4
【黑羽】ActionScript 3.0系列教程来源:本教程受Creative Commons License.协议保护,未经作者同意,不得用于商业用途。
ActionScript 3 教程系列【黑羽】ActionScript 3.0系列教程(1):与Flash9先来一次亲密接触!【黑羽】AS 3.0教程(2):AS3.0的类及绑定AS3.0教程(3):Document Class特色为我们带来了什么?AS3.0教程(4):爽快使用XMLAS3.0教程(5):强大的事件机制(1)【黑羽】AS3.0教程(6):强大的事件机制(2)【黑羽】AS3.0教程(7):强大的事件机制(3)【黑羽】AS3.0教程(8):强大的事件机制(4)【黑羽】AS3.0教程(9):强大的事件机制(5)【黑羽】AS3.0教程(10):强大的事件机制(6)【黑羽】AS3.0教程(11): 视觉元件精要(1)【黑羽】AS3.0教程(12):享受异常处理机制的时候到了【黑羽】AS3教程(13):AS3中的数据存取方式效率比较ActionScript 3教程(外篇)小谈ActionScript 3.0与AS 2.0,1.0的swf兼容性AS3.0教程(外1):Flash 9 Alpha 调试须知AS3.0教程(外2):用flash9试用版编译as3的问题AS3.0教程(外3):如何移除容器下所有子显示对象?一、Flash9先来一次亲密接触Flash Professional 9 ActionScript 3.0 Preview 版本今天发布了,意味着从此我们从此不仅仅只能使用Flex 2来使用AS3.0,更可以使用我们一直很熟悉的Flash IDE来进行AS3.0开发了。
与Flex 2不同,Flash 9 alpha(即上面的Flash Professional 9 ActionScript 3.0 Preview )允许我们创建基于时间轴的ActionScript 3.0的Fla文档,而不是基于State的MXML文档。
Action Script 3.0 练习动画导航条在浏览网页时,经常会见到各种Flash制作的网页导航条。
一个网页导航条通常由多个按钮组成,本练习将使用Flash的自定义按钮结合遮罩动画、形状补间动画等技术制作一个供网页使用的动画导航条,如图1-54所示。
Flash中的按钮和网页中的按钮一样,包含4种状态,即弹起、指针经过、按下和点击。
在制作按钮时,需要对按钮的4种状态进行设置,使按钮更有动感。
(1)在Flash中新建影片文件“navigator.fla”,导入素材图像“background.ai”,作为影片的背景,如图1-55所示。
图1-55 导入素材图像(2)新建按钮元件“btn01”,选择【椭圆工具】,在元件中绘制一个直径为80px 的圆形,设置边线为2px的白色(#FFFFFF)实线,填充为绯红色(#FF6600),如图1-56所示。
图1-56 绘制按钮(3)在按钮中新建图层,在新图层中用【钢笔工具】绘制按钮反光的图形,将其填充为白色(#FFFFFF),透明度为20%,如图1-57所示。
图1-57 绘制反光层(4)在“图层1”和“图层2”之间新建“图层3”,在图层3中将【指针经过】帧转换为关键帧,输入标签文本“首页”,如图1-58所示。
图1-58 输入按钮标签(5)在“图层3”中,分别将【按下】和【点击】两帧转换为关键帧,并将【按下】帧处的标签文本颜色设置为绿色(#00FF00),即可完成第1个按钮的制作,如图1-59所示。
图1-59 设置【按下】和【点击】帧(6)用相同的方法制作其它4个按钮,分别为按钮设置不同的底色和文本颜色,如图1-60所示。
图1-60 制作按钮(7)在主时间轴中第300帧处按F5快捷键添加帧,如图1-61所示。
图1-61 添加帧(8)新建“图层2”图层,将名为btn01的按钮添加到图层中,然后在图层第1帧处执行【创建补间动画】命令,如图1-62所示。
图1-62 创建补间动画(9)在“图层2”第40帧处右击,执行【插入关键帧】|【位置】命令,然后将该帧处的按钮拖动到舞台相应的位置,如图1-63所示。
Action Script 3.0 制作可控进度条在ActionScript中,进度条组件的进度是可控的。
将进度条组件定义为手动模式后,用户可通过按钮组件来控制进度条的进度前进或后退。
本练习将介绍手动模式下进度条的控制方法以及如何定义进度条的样式,如图10-9所示。
图10-9 可控进度条(1)在Flash中分别创建影片文件“pb.fla”和脚本文件“pb.as”,并将素材背景图像以及【组件】面板中的Button组件和ProgressBar组件导入到影片的【库】中,如图10-10所示。
图10-10 导入素材和组件(2)新建元件“元件1”,将素材图像插入到“元件1”中,并右击元件1,执行【链接】命令,将元件链接为bgimg类,如图10-11所示。
图10-11 链接元件(3)切换到pb.as文件,创建ActionScript代码包,并导入各种类,如下所示。
package {import flash.display.Sprite;//导入Sprite基类import fl.controls.Button;//导入按钮组件类import fl.controls.ProgressBar;//导入进度条组件类import fl.controls.ProgressBarMode;//导入进度条组建的模式类import flash.text.TextFormat;//导入文本格式类import flash.events.MouseEvent;//导入鼠标事件类import flash.display.MovieClip;//导入影片剪辑类}(4)创建主自定义类pb,声明进度条和进度条的容量值。
创建主函数pb(),然后调用背景图像与进度条、按钮等对象的函数,如下所示。
public class pb extends Sprite {//创建主自定义类pbvar pbar:ProgressBar;//声明变量pbar为进度条组件var barvalue:uint;//声明变量barvalue为进度条的容量值public function pb () {//创建主函数pb()backgroundimg ();pbobject ();//调用进度条组件的函数forward ();//调用前进按钮的函数recoil ();/调用后退按钮的函数}(5)创建进度条的自定义函数pbobject(),并用各种属性定义进度条的样式,如下所示。
青岛大学软件技术学院二维动画课程设计报告题目名称 Flash游戏制作——《雷电游戏》姓名范庆珍专业数字媒体艺术班级 08级数字媒体艺术指导教师雷博二0一0年一月十五日目录目录 (2)一、游戏功能概述(雷电游戏) (3)二、角色与场景设计 (6)2.1 角色设计 (6)2.2场景设计 (9)3.1 模块一 (15)3.1.1 简介 (15)3.1.2 代码 (15)3.2 模块二 (20)3.2.1 简介 (20)3.2.2 代码 (20)四、测试与完善 (21)五、小结 (22)六、心得体会 (23)致谢 (24)参考文献 (25)评语 (26)一、游戏功能概述(雷电游戏)1.利用键盘控制对象的运动,从而实现移动飞机,发出子弹的功能。
并且飞机的移动,旋转和子弹的发射可以同时进行。
并且根据障碍物摆放和场景图片的效果及敌人的布局设置不同的房间感受,利用影片剪辑做好的地方部队可以实现自身的移动。
2.利用函数hitTestObject(),实现子弹打中敌方障碍(坦克或飞机)物子弹消失,敌方障碍(坦克或飞机)爆破的功能,并且飞机又一定的射程范围;并且飞机碰到障碍物(房间内的墙壁)会坠毁并显示死亡的功能。
3.利用数据类型的转换使飞机每击中敌方飞机一次得一分,每击中敌方坦克一次得三分,并在舞台上显示自己的得分。
4.利用事件的监听,影片剪辑和按钮实现序幕和场景的转换和进入下一关。
引入声音,利用编辑器编辑,达到想要的效果。
角色:我方飞机敌方坦克敌方飞机障碍物(房间墙壁)场景1.序幕;2.房间1(第一关);2.房间2(第二关);3.房间3(第三关);二、角色与场景设计2.1 角色设计1.打开Flash CS3新建一个影片剪辑文件,首先向舞台导入一个战斗机图形并按ctrl+B键打散,再移除多余的背景部分。
然后将整个图形转换为影片剪辑,再定义第2帧飞机坠毁,第3帧die ,并在第二帧上添加声音,.命名舞台上的实力为mc, 如下图所示。
Action Script 3.0 移动显示对象如果想要改变舞台上对象绘制的次序,也就是移到其它显示对象的前面或后面,可以使用setChildIndex()方法,该方法用来改变指定子元件的位置。
而使用getChildIndex()和getChildAt()方法,可以查询其它子元件的索引值和实例。
setChildIndex()方法可用于重排容器内子元件的次序。
此方法接受两个参数:要被移动的子元件的引用以及该子元件在容器内的新位置。
指定的索引位置必须是有效的,负值或者太大的值都会产生RangeError。
例如,绘制三个不同颜色的圆形,红色的圆位于最上面。
然后,使用setChildIndex()方法将红色的圆移动到另外两个圆的下面,即将它在容器内的索引值2改为0,代码如下所示。
var blue:Shape = drawCircle(0x0000FF,125,275,100);addChild(blue); //将蓝色圆形加入到显示列表var green:Shape = drawCircle(0x00FF00,275,275,100);addChild(green); //将绿色圆形加入到显示列表var red:Shape = drawCircle(0xFF0000,200,200,100);addChild(red); //将红色圆形加入到显示列表setChildIndex(red,0) //改变红色圆形的索引值为0,即位于其它子元件的下面//创建绘制圆形函数function drawCircle(color:uint,x:int,y:int,radius:int):Shape{var shape:Shape = new Shape();shape.graphics.beginFill(color);shape.graphics.drawCircle(x,y,radius);shape.graphics.endFill();return shape;}getChildIndex()方法以显示对象为参数,返回容器内显示对象的索引值。
ActionScript3.0实用教程ActionScript3.0实用教程:使用显示对象在as中,通信是完全由事件驱动的。
as3.0的事件模型允许完全封装类对象。
封装的意思是类对象仅处理他们自己的内部,与其他类对象的功能没有联系。
他们做自己的工作并且保持低调。
对象需要与外部世界通信时,他们就分发事件。
注册在对象上的监听器等待分发的事件,并作出相应的动作。
在许多情况下都会触发事件,这取决于类本身。
通过标准的as API处理他们。
7.1 as3.0 事件模型as3.0事件模型使对象之间的通信简单、一致。
7.1.1 事件过程细节处理事件的3个过程如下事件监听器声明声明注册函数来监听事件事件分发当事件在类中发生时,它就会被这个对象分发出去。
事件对象被事件传递。
事件对象包含事件的相关信息。
事件监听器或处理器事件监听器或处理器是拥有一系列代码的函数,响应函数可以“听到”的事件。
事件监听器和事件处理器是相同的意思——是一个监听事件也是处理事件的函数。
7.1.2 事件分发所有的类都用从EventDispatcher类继承的dispatchEvent()方法分发事件,或者实现IEventDispatcher接口。
当类中的某件事情发生并且想要分发到应用程序的其他部分让他们知道这件事情发生了时,就调用dispatchEvent()方法。
事件相关的信息和其他需要的参数通过时间对象发送给监听器。
事件的分发者是事件过程的开始。
Event类是所有事件对象的基类。
当一个事件被EventDispatcher的方法触发(例如addEventListener),事件对象都被作为参数传递到监听器函数中。
事件对象包含被分发事件的相关数据。
Event类有标准的属性,方法和被大多数类使用的常量。
Event类的属性bubbles 布尔值,指示事件是否为冒泡事件cancelable 指示是否可以阻止与事件相关联的行为currentTarget 当前正在使用某个事件监听器处理事件对象的对象phase 事件流中的当前阶段target 事件目标type 分发事件类型7.1.3 注册事件监听器事件监听器向对象注册来监听对象分发的事件。
ActionScrip3.0殿堂之路前言ActionScript 3与RIA时代的到来具有高度互动性、丰富用户体验及功能强大的客户端,是目前网络开发的迫切需求。
Adobe公司的Flash Player凭借其全球97%的桌面电脑占有率和跨平台的优势,成为了事实上的下一代的RIA(Rich Internet Application,丰富因特网程序)主力。
Adobe公司于2006年年中推出了强大的ActionScript 3语言,和支持ActionScript 3的新一代的虚拟机AVM 2。
经测试,AVM 2执行Action Script 3代码比以前的ActionScript 2代码执行效率要快10倍以上。
ActionScript 3与ActionScript 2和1有本质上的不同,是一门功能强大的、面向对象的、具有业界标准素质的编程语言。
它是Flash Player运行时功能发展中的重要里程碑。
ActionScript 3是快速构建Rich Internet Application的理想语言。
由于Adobe的Flex和Flash的成功,在业界已经掀起了RIA应用新浪潮!雅虎(Yahoo!)、eBay、Google都相继推出基于ActionScript的RIA应用程序和ActionScript API库。
著名的应用案例有Yahoo Maps、eBay AIR拍卖程序、Google Analytics和Google Finance、微软的Wallop社区,等等。
ActionScript 3有以下优势:1.对面向对象编程(OOP)语言的完全支持。
核心语言基于ECMAScript(ECMA 262)标准,对OOP架构深层优化。
2.彻底更新的显示对象系统架构。
3.采用了先进的E4X,使XML成为ActionScript 3语言的内建数据类型(native support)。
操作直白、简单。
与ActionScript 2比较,极大地减轻了XML数据处理工作量。
flash cs3 As3.0类编程在线教程(Action Script3.0入门到精通)200讲当前位置:理想视频教程网→ 免费在线教程→ 电脑类在线课程flash cs3 As3.0类编程在线教程(Action Script3.0入门到精通)200讲减小字体增大字体第一章:基础1.学习方法2.代码书写的位置13.代码书写的位置24.代码书写的位置35.代码书写的位置46.代码书写的位置57.代码书写的位置68.类的概念9.类的继承性10.代码书写的工具11.练习112.练习213.思考延伸第二章事件14.学习思路15.鼠标事件16.鼠标单击17.鼠标按下与松开18.鼠标移入与移出19.影片鼠标事件120.影片鼠标事件221.影片鼠标事件322.超炫按钮123.超炫按钮224.超炫按钮325.超炫按钮426.超炫按钮527.超炫按钮628.重复执行事件129.重复执行事件230.重复执行事件331.重复执行事件432.重复执行事件533.重复执行事件634.重复执行事件735.重复执行事件836.重复执行事件937.重复执行事件1038.重复执行事件1139.时间事件140.时间事件241.时间事件342.时间事件443.时间事件544.时间事件645.时间事件746.时间事件847.时间事件948.时间事件1049.时间事件1150.键盘事件151.键盘事件252.键盘事件353.键盘事件454.键盘事件555.键盘事件656.键盘事件757.键盘事件858.键盘事件959.键盘事件1060.键盘事件1161.键盘事件1262.键盘事件1363.键盘事件1464.练习—超炫简历165.练习—超炫简历266.练习—超炫简历367.练习—超炫简历468.练习—超炫简历569.练习—超炫简历670.练习—超炫简历771.练习—超炫简历872.练习—超炫简历973.类—超炫简历1074.类—超炫简历1175.类—超炫简历1276.类—超炫简历1377.类—超炫简历1478.类—超炫简历1579.类—超炫简历1680.类—超炫简历1781.类—超炫简历1882.思考延伸第三章:系统环境83.学习方法84.检测操作系统185.检测操作系统286.检测操作系统387.检测操作系统488.检查播放器189.检查播放器290.检查播放器391.检测系统语言192.检测系统语言293.检测系统语言394.检测系统语言495.检测分辨率196.检测分辨率297.检测分辨率398.设置缩放199.设置缩放2 100.对齐模式1 101.对齐模式2 102.禁用右键菜单103.禁用部分菜单1 104.禁用部分菜单2 105.禁用部分菜单3 106.禁用部分菜单4 107.自定义菜单1108.自定义菜单2 109.自定义菜单3 110.自定义菜单4 111.自定义菜单5 112.自定义菜单6 113.自定义菜单7 114.自定义菜单8 115.自定义菜单9 116.自定义菜单10 117.检测声音118.检测MP3 1119.检测MP3 2 120.检测MP3 3 121.检测MP3 4 122.检测MP3 5 123.检测视频124.改变播放器设置125.安全设置126.练习—双语简历1 127.练习—双语简历2 128.练习—双语简历3 129.练习—双语简历4130.思考延伸第四章:数据131.学习方法132.数字的表现形式133.表现形式间转换1134.表现形式间转换2 135.数字的类型136.四舍五入1137.四舍五入2138.正负值转换139.随机数值140.限制随机数值141.练习—掷色子1 142.练习—掷色子2 143.练习—掷色子3 144.练习—掷色子4 145.练习—掷色子5 146.练习—掷色子6 147.练习—掷色子7 148.练习—掷色子8 149.练习—掷色子9 150.练习—掷色子10151.练习—掷色子11 152.练习—掷色子12 153.练习—掷色子13 154.练习—掷色子14 155.练习—掷色子15 156.练习—掷色子16 157.练习—掷色子17 158.练习—掷色子18 159.练习—掷色子19 160.练习—掷色子20 161.练习—掷色子21162.思考延伸第五章:石头剪刀布游戏163.学习思路164.石头剪刀布1165.石头剪刀布2166.石头剪刀布3167.石头剪刀布4168.石头剪刀布5169.石头剪刀布6170.石头剪刀布7171.石头剪刀布8172.石头剪刀布9173.石头剪刀布10 174.石头剪刀布11 175.石头剪刀布12 176.石头剪刀布13 177.石头剪刀布14 178.石头剪刀布15 179.石头剪刀布16 180.石头剪刀布17 181.石头剪刀布18 182.石头剪刀布19 183.石头剪刀布20184.石头剪刀布21 185.石头剪刀布22 186.石头剪刀布23 187.石头剪刀布24 188.石头剪刀布25 189.石头剪刀布26 190.石头剪刀布27 191.石头剪刀布28 192.石头剪刀布29 193.石头剪刀布30 194.石头剪刀布31195.石头剪刀布32 196.石头剪刀布33 197.石头剪刀布34 198.石头剪刀布35 199.石头剪刀布36 200.石头剪刀布37。
Action Script 3.0 练习产品列表数组是一种存储数据的工具。
由数组可以存储各种有序的数据,例如,产品名称列表等等。
在Flash中,可以使用ActionScript3读取数组中的内容,并将这些内容输出显示到组件中,以供浏览,如图5-5所示。
图5-5 显示数组产品列表用数组来制作产品列表,首先应创建数组,并为数组添加元素。
然后即可通过监听鼠标事件来将数组中的元素输出到组件中。
(1)在Flash中新建影片文件“productlist.fla”,将“图层1”修改为“背景”并在该层中导入背景图像“background.bmp”,如图5-6所示。
图5-6 导入背景图像(2)新建“组件背景”图层,选择【基本矩形工具】,在该层中绘制一个圆角矩形,如图5-7所示。
图5-7 绘制组件背景(3)选中圆角矩形,按Ctrl+B组合键,将图形打散。
选中打散后的图形,在【颜色】面板中设置【类型】为“线性”,并设置颜色样本条两侧为白色,中间为灰色(#F3F5FA),如图5-8所示。
图5-8 调整组件背景颜色(4)按F8快捷键将组件背景转换为“影片剪辑”元件,并在【属性】面板中调整其【颜色】的“Alpha”值为“80%”,如图5-9所示。
图5-9 设置元件透明度(5)新建“组件”图层,在图层中插入1个标签组件(Label),3个单选按钮组件(RadioButton)和1个文本域组件(TextArea),如图5-10所示。
图5-10 插入组件(6)在【属性】面板中分别将插入的各组件实例化,实例名称如表5-3所示。
表5-3 组件的实例名称(7)新建“动作脚本”图层,按F9快捷键即可打开【动作】面板,编写ActionScript 代码。
在代码之前首先应导入控制文本域中滚动条的公共类,如下所示。
import fl.controls.ScrollPolicy;//导入管理滚动条策略的公共类(8)分别创建数组“product1”、“product2”和“product3”,并为这3个数组添加元素,如下所示。
Action Script 3.0 练习控制汽车移动
在很多交互的游戏中,角色的移动通常是通过鼠标控制来完成的。
当鼠标点击有效区域的某一位置时,角色将自动向该位置移动。
在Flash游戏或交互动画中,将物体的坐标与速度相加可以实现物体的位移。
如果与鼠标事件相结合,即可实现鼠标控制物体的位移。
如图8-19所示,鼠标点击舞台右侧后,汽车自动向右移动,速度并逐渐减慢直至停止。
图8-19 控制汽车移动
使用x属性和mouseX属性获取汽车和鼠标点击位置的x的坐标,并根据这两个坐标计算出它们之间的水平距离。
然后,将距离乘以缓冲系数即可得到当前汽车的速度,并可以重新设定汽车的x坐标。
(1)新建530×400像素的空白文档,将素材图像导入到【库】面板中,并将
“bg”素材图像拖入到舞台中,如图8-20所示。
图8-20 拖入背景图像
(2)新建“汽车”影片剪辑元件,在舞台中绘制一辆红色的小汽车,如图8-21所示。
图8-21 绘制汽车
(3)右击【库】面板中的“汽车”元件,在弹出的菜单中执行【链接】命令。
然后,在【链接属性】对话框中设置【类】为“Car”,如图8-22所示。
图8-22 设置链接属性
(4)新建“AS”图层,打开【动作】面板。
然后,输入在舞台中显示“汽车”元件代码,如下所示。
var car:Car = new Car();
//创建Car对象,即实例化汽车元件
car.x = 150;
//设置汽车的x坐标
car.y = 280;
//设置汽车的y坐标
addChild(car);
//将汽车显示在舞台中
(5)侦听鼠标单击事件,通过调用start()函数获取鼠标光标的x坐标,以及判断汽车面向的方向,代码如下所示。
var a:Number = 0.1;
//缓冲系数
var vx:Number;
//汽车速度
var endx:Number;
//鼠标光标的x坐标
var carR:Boolean = true;
//判断汽车面向的方向,向右为真
stage.addEventListener(MouseEvent.CLICK,start);
//侦听鼠标单击事件,调用start()函数
function start(e:MouseEvent):void{
endx = this.mouseX;
//获取鼠标光标的x坐标
if (endx<car.x && carR == true){
//如果鼠标点击的位置在汽车的左面且汽车面向右
car.scaleX*=-1;
//水平翻转汽车元件
carR = false;
//设置汽车面向右为假,即面向左
}
else if(endx>car.x && carR ==false){
//如果鼠标点击的位置在汽车的右面且汽车面向左
car.scaleX*=-1;
//水平翻转汽车元件
carR = true;
//设置汽车面向右为真,即面向右
}
}
(6)在start()函数中创建侦听汽车的enterFrame事件,通过调用move()函数实现汽车的位移,代码如下所示。
car.addEventListener(Event.ENTER_FRAME,move);
//侦听汽车的enterFrame事件,调用move()函数实现汽车位移
function move(e:Event):void{
var dx:int = endx - car.x;
//计算鼠标点击的位置与汽车的水平距离
vx = dx*a;
//计算当前汽车的速度
car.x += vx;
//设置汽车新的x坐标,即实现位移
if (dx==0){
//如果点击的位置与汽车的距离为0
car.removeEventListener(Event.ENTER_FRAME,move);
//移除侦听汽车的enterFrame事件
}
}。