1、;2,导弹Missle ;3,生命球AddLife游戏的元素比较简单,下面分别加以分析并设计它们;(在你的磁盘中新建一个flash文档,重命名为”死里逃生.fla”,在该flash文档的同一目录下新建一个文件夹,重命名为“classes”;如下图:)1.飞机应该有的属性:速度speed;生命:life;他还应该能跟随鼠标移动;具体做法如下,新建一个ActionScript文件,代码如下:将上面的actionscript文件保存在classes文件夹中,文件命名为Plan.as ,注意,文件名一点要与类名相同;2,导弹应该有的属性和方法:角速度:omega,速度:speed,导弹还要求能跟踪飞机
2、。代码如下:将上面的as文件也保存在classes文件夹中,并把该as文件命名为Missle.as注:这些代码有些复杂,希望大家仔细看,理解了就好了。在实现跟踪飞机这一代码块(即onTimerHandler函数),希望大家仔细把flash的坐标系统和Math的三角函数这些知识温习一下。在这里我不太想讲像if语句,swich语句,while,do。while。语句,基本的表达式那些基本的内容,相信学过C的人都会这些的。关于面向对象的一些核心内容:类,属性,方法,接口,继承,多态。我也不想讲,也不能讲,因为我不想误人子弟,我也只是了解这些知识,希望想了解的同学去看看有关java或c+的教程。那下面
3、接着第三个类:3,生命球应该有的属性和方法:所含的生命值,也就是能给主角加多少生命lifeValue;所显示的时间,也就是生命球能在舞台上显示多久timed;将上面的as文件也保存在classes文件夹中,并把该as文件命名为AddLife.as;5,有关元素的类文件都写好了,就差一个文档类了,有关文档类的代码我们稍后再说,上面我们一直是写代码,现在我们来搭建主场景:打开你新建的“死里逃生。fla”文档,如下图搭建场景:前面是元素的类型,后面是文件的实例名。“重新开始”按钮下面还覆盖了一个“开始”按钮,实例名为“start_btn”。6:类库的组成:上图只显示出了与类库连接的原件;分别与我们上
4、面写的类连接在一起;库中还有声音文件,是个爆炸的声音,这个声音的连接属性设置为:与“死里逃生.fla”文档在同一目录下的还有一个背景音乐,背景音乐的名字为:mySong.mp3;注意文件名一定要是mySong.mp3,因为在下面的代码中我用的是这个名字;7:最后我们来写文档类,把整个的代码和元件组织起来。文档类的代码:(此文件比较的繁琐,import语句可以简写,如:import.flash.display.*;import flash.display.event.*;在这里没有采用简写,好让大家方便查阅API);至此:整个游戏的制作就结束了。结束的目录结构应该如下:Classes文件夹里的文
5、件如下:将上面的as文件也保存在classes文件夹中,并把该as文件命名为Test.as;然后在“死里逃生.fla”文档的文档类后面的方框中填入:classes.Test修正:在Test类中的第63和第64之间加入如下语句:if (myPlan.life 新建ActionScript文件。写下代码如下:package classes import flash.display.MovieClip; public class Circle extends MovieClip private var speed:int; public function Circle() speed=5; publ
6、ic function moveLeft():void this.x+=speed; public function moveRight(): this.x-=speed; public function moveUp(): this.y-=speed; public function moveDown(): this.y+=speed; 将这个as文件保存在“classes”文件夹中,保存名为“Circle.as”;c : 再点击“键盘控制_1.fla”文档的文件菜单 import flash.events.KeyboardEvent; import flash.ui.Keyboard; p
7、ublic class Test extends MovieClip private var myCircle:Circle; public function Test() myCircle=new Circle(); myCircle.x=400; myCircle.y=300; addChild(myCircle); stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDownHandler); private function onKeyDownHandler(e:KeyboardEvent): switch (e.keyCode) ca
8、se Keyboard.LEFT : myCircle.moveLeft(); break; case Keyboard.RIGHT : myCircle.moveRight(); case Keyboard.UP : myCircle.moveUp(); case Keyboard.DOWN : myCircle.moveDown(); if (myCircle.x800-myCircle.width/2) myCircle.x=800-myCircle.width/2; else if (myCircle.x600-myCircle.height/2) myCircle.y=600-myC
9、ircle.height/2; else if (myCircle.y import flash.events.MouseEvent; import flash.ui.Mouse; public class Test extends MovieClip public function Test() stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMoveHandler); private function onMouseMoveHandler(e:MouseEvent):void Mouse.hide(); myCircle.x=e.st
10、ageX; myCircle.y=e.stageY;d: 点击“鼠标控制_1.fla”文档舞台的空白区,在属性栏中的文档类中填写:测试影片,圆能随着鼠标移动;直接从库中将被控对象拖入舞台(键盘控制);在您的计算机磁盘中新建一个fla文档,重命名为“键盘控制_2.fla”在这个文档的同一目录新建一个文件夹,重命名为“classes”;双击打开“键盘控制_2.fla”文档。建好影片剪辑之后,(不要删掉舞台上主角圆的实例)这时库中有刚刚建立的影片剪辑元件而库中同时有它的实例;点击“键盘控制_2.fla”文档的文件菜单 import flash.display.Stage; this.stage.ad
11、dEventListener(KeyboardEvent.KEY_DOWN,onKeyDownHandler); moveLeft(); moveRight(); moveUp(); moveDown(); default : private function moveLeft(): this,x-=speed; private function moveRight(): private function moveUp(): private function moveDown():注意这句:this.stage.addEventListener();舞台中有this的实例时,才能调用this的
12、stage属性,否则会报错的。c :切换到“键盘控制_2.fla”文档,在库中的影片剪辑“主角圆”上点击鼠标右键,在弹出的菜单中选择“链接”,之后在弹出的对话框中如下图填写相关的项目:测试影片,方向键能控制主角圆的移动;这里就不再啰嗦写”鼠标控制_2.fla”了。相信大家早以多我的啰嗦忍无可忍了。O(_)o总结一下:键盘控制和鼠标控制都需要用stage.addEventListener(,.);文档类可以直接用stage属性,而非文档类要用这个类的实例的stage属性(即this.stage),就要求事先有实例放在舞台上;(纯属个人总结,正确与否只是本人认证了一下,没有任何官方的说明。您认这种
13、说法错误,可直接略过这段,不要被我误导了。二物件的创建与销毁物件的创建和销毁比较简单的,大体来说就是在文档类中采用new关键字创建新的对象,然后用addChild()/addChilaAt()加入到容器,当不需要的时候用removeChild()/removeChildAt()从容器中把它删除;当成批产生物件时,for循环结合数组能很好的解决问题。看个实例先,(申明:这个实例来自风云II系列丛书之Flash cs3 ActionScript 3.0游戏开发基础与范例,版权都属原作者所有)这里本人不篡改原作,只做个搬运工。(1)首先,启动flash cs3;(2)选择 文件新建 菜单命令,选择新
14、建一个ActionScript 3.0文档;(3)保存这个fla文件为Sample7_5.fla;(4)给主场景添加一个背景。修改主场景的帧频为30fps,填写文档类为objclasses。ObjSample,如下图所示;(5)创建一个金币的影片剪辑,保存到库中,在库中选择它,修改它的连接属性为外部类objclasses.Obj,如下图所示,这个金币将是这个例子中动态创建和删除的对象。(6)在fla文件存在的目录下创建objclasses文件夹;(7)在objclasses文件夹中创建Obj.as和ObjSample.as两个as 文件(8)编写如下代码清单Obj.as所示的代码:packag
15、e objclasses import flash.events.Event; / 对象类 public class Obj extends MovieClip / 速度属性Number; function Obj(): speed = 0; this.addEventListener(Event.ENTER_FRAME, onFrameHandler); / 在ENTER_FRAME的响应函数中随机产生一个速度 / 并使对象按照这个速度向下移动 private function onFrameHandler(event:Event): speed = Math.floor(Math.rand
16、om() * 3) + 1; this.y += speed;(9)编写代码清单ObjSample.as所示的代码: import flash.utils.Timer; import flash.events.TimerEvent; / 对象例子的类 public class ObjSample2 extends MovieClip / 声明一个1秒间隔的Timer实例 private var mytimer:Timer = new Timer(1000); / 声明一个存储对象的数组 private var arrObj:Array = new Array(); / 构造函数中添加TIMER
17、事件,并启动该计时器 function ObjSample2(): mytimer.addEventListener(TimerEvent.TIMER, onTimerHandler); mytimer.start(); / TIMER事件响应函数 / 每秒创建一个新对象,X坐标随机产生 private function onTimerHandler(event:TimerEvent): var obj:Obj = new Obj(); obj.x = Math.floor(Math.random() * 500) + 25; obj.y = 0; addChild(obj); / 添加到对象数组中 arrObj.push(obj); / 消除Y坐标大于200的对象 for(var i:int=0; i 200) / 从场景中消除 removeChild(arrObji); / 从数组中消除 arrObj.splice(i,1); 测试影片可能很多地方没有说清楚。欢迎批评指教。