×

关注微信公众号

免备案网站空间虚拟主机双线空间域名查询PS数码后期
photoshop互助课堂数百G视频教程下载英语培训机构初中英语如何学随时随地聆听大师开讲/课堂
酷素材!视频教程打包下手绘教程抠图教程路径专辑photoshop cs3视频教程
查看: 11349|回复: 43

从简单的开始做起—射击类游戏(二)[本文已收录教程库]

  [复制链接]
发表于 2010-10-21 10:07:57 | 显示全部楼层 |阅读模式
相关教程阅读: 从简单的开始做起—射击类游戏(一)


从简单的开始做起—射击类游戏(二)

1、首先打开Flash CS4 (CS3、CS4或CS5没什么大的区别)新建项目,按确定。打开项目面板。图:新建项目



2、点击右边的第一个三角按钮(项目),在下拉菜单中选"新建项目"。在弹出新建项目面板项目名称:填入项目名称。在根文件夹:项中点击右边的浏览按钮,浏览到准备存放项目的目录,按确定。在ActionScript版本:选ActionScript 3.0 。单击"创建项目"按钮,这样项目就建好了。图:项目面板



3、把AirRaid.fla文件复制到项目文件夹下(省去制作界面)。点击下面的"创建类"图标,在弹出的创建类面板类:的文本框中填入文件名:AirRaid 单击创建类按钮。这样类就创建好了并为我们写好了类的框架,我们可以在框架中添加我们的代码了。
图:创建类



图:填入类名



图:类的框架




4、编写AirRaid.as类

AirRaid.as类:文档类  AirRaid类是游戏的控制器,绑定AirRaid.fla 。负责生成界面上的飞机、火炮、子弹。显示得分,子弹的剩余数量。注册了键盘按下,释放侦听器,接收用户的键盘操作。注册了进入帧事件侦听器,进行碰撞检测。定义一个飞机计时器,随机生成飞机。检测剩余子弹的数目,当子弹数为零时也就是主角死亡了,移除界面上的飞机,火炮,跳转到重玩按钮。
  1. package {
  2.         import flash.display.MovieClip;;
  3.         import flash.display.SimpleButton;
  4.         import flash.events.KeyboardEvent;
  5.         import flash.utils.Timer;
  6.         import flash.events.TimerEvent;
  7.         import flash.text.TextField;
  8.         import flash.events.Event;
  9.        
  10.         public class AirRaid extends MovieClip {
  11.                 private var aagun:AAGun;//火炮
  12.                 private var airplanes:Array;//飞机数组
  13.                 private var bullets:Array;//子弹数组
  14.                 public var leftArrow, rightArrow:Boolean;
  15.                 private var nextPlane:Timer;//不定时生成飞机的计时器
  16.                 private var shotsLeft:int;//得分文本
  17.                 private var shotsHit:int;//子弹数文本
  18.                
  19.                 public function startAirRaid() {
  20.                         // 初始化得分数和子弹数
  21.                         shotsLeft = 20;
  22.                         shotsHit = 0;
  23.                         showGameScore();
  24.                        
  25.                         // 生成炮加入到舞台上
  26.                         aagun = new AAGun();
  27.                         addChild(aagun);
  28.                        
  29.                         // 生成飞机、子弹数组
  30.                         airplanes = new Array();
  31.                         bullets = new Array();
  32.                        
  33.                         // 键盘按下、释放事件侦听器
  34.                         stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
  35.                         stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
  36.                        
  37.                         // 进入帧事件侦听器,检测子弹击中飞机的碰撞检测。
  38.                         addEventListener(Event.ENTER_FRAME,checkForHits);

  39.                         // 生成下一架飞机
  40.                         setNextPlane();
  41.                 }
  42.                 //不定时生成飞机
  43.                 public function setNextPlane() {
  44.                         //1000毫秒至2000毫秒之间生成一架飞机
  45.                         nextPlane = new Timer(1000 + Math.random() * 1000,1);
  46.                         //
  47.                         nextPlane.addEventListener(TimerEvent.TIMER_COMPLETE,newPlane);
  48.                         nextPlane.start();
  49.                 }
  50.                
  51.                 public function newPlane(event:TimerEvent) {
  52.                         // 随机的边、速度和高度
  53.                         if (Math.random() > .5) {
  54.                                 var side:String = "left";
  55.                         } else {
  56.                                 side = "right";
  57.                         }
  58.                         var altitude:Number = Math.random()*50+20;
  59.                         var speed:Number = Math.random()*150+150;
  60.                        
  61.                         // 生成飞机
  62.                         var p:Airplane = new Airplane(side,speed,altitude);
  63.                         addChild(p);
  64.                         airplanes.push(p);
  65.                        
  66.                         // set time for next plane
  67.                         setNextPlane();
  68.                 }
  69.                
  70.                 // 碰撞检测
  71.                 public function checkForHits(event:Event) {
  72.                         for(var bulletNum:int=bullets.length-1;bulletNum>=0;bulletNum--){
  73.                                 for (var airplaneNum:int=airplanes.length-1;airplaneNum>=0;airplaneNum--) {
  74.                                         if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum])) {
  75.                                                 airplanes[airplaneNum].planeHit();
  76.                                                 bullets[bulletNum].deleteBullet();
  77.                                                 shotsHit++;
  78.                                                 showGameScore();
  79.                                                 break;
  80.                                         }
  81.                                 }
  82.                         }
  83.                        
  84.                         if ((shotsLeft == 0) && (bullets.length == 0)) {
  85.                                 endGame();
  86.                         }
  87.                 }
  88.                
  89.                 // 按下键盘
  90.                 public function keyDownFunction(event:KeyboardEvent) {
  91.                         if (event.keyCode == 37) {
  92.                                 leftArrow = true;
  93.                         } else if (event.keyCode == 39) {
  94.                                 rightArrow = true;
  95.                         } else if (event.keyCode == 32) {
  96.                                 fireBullet();
  97.                         }
  98.                 }
  99.                
  100.                 // 释放键盘
  101.                 public function keyUpFunction(event:KeyboardEvent) {
  102.                         if (event.keyCode == 37) {
  103.                                 leftArrow = false;
  104.                         } else if (event.keyCode == 39) {
  105.                                 rightArrow = false;
  106.                         }
  107.                 }

  108.                 // 生成新的子弹
  109.                 public function fireBullet() {
  110.                         if (shotsLeft <= 0) return;
  111.                         var b:Bullet = new Bullet(aagun.x,aagun.y,-300);
  112.                         addChild(b);
  113.                         bullets.push(b);
  114.                         shotsLeft--;
  115.                         showGameScore();
  116.                 }
  117.                
  118.                 public function showGameScore() {
  119.                         showScore.text = String("得分: "+shotsHit);
  120.                         showShots.text = String("剩余子弹: "+shotsLeft);
  121.                 }
  122.                
  123.                 // 从数组获取飞机
  124.                 public function removePlane(plane:Airplane) {
  125.                         for(var i in airplanes) {
  126.                                 if (airplanes[i] == plane) {
  127.                                         airplanes.splice(i,1);
  128.                                         break;
  129.                                 }
  130.                         }
  131.                 }
  132.                
  133.                 // 获取数组的一个子弹
  134.                 public function removeBullet(bullet:Bullet) {
  135.                         for(var i in bullets) {
  136.                                 if (bullets[i] == bullet) {
  137.                                         bullets.splice(i,1);
  138.                                         break;
  139.                                 }
  140.                         }
  141.                 }
  142.                
  143.                 // 游戏结束,移除界面上的东西。
  144.                 public function endGame() {
  145.                         // 移除飞机
  146.                         for(var i:int=airplanes.length-1;i>=0;i--) {
  147.                                 airplanes[i].deletePlane();
  148.                         }
  149.                         airplanes = null;
  150.                        
  151.                         aagun.deleteGun();
  152.                         aagun = null;
  153.                         // 移除侦听器
  154.                         stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
  155.                         stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
  156.                         removeEventListener(Event.ENTER_FRAME,checkForHits);
  157.                        
  158.                         nextPlane.stop();
  159.                         nextPlane = null;
  160.                        
  161.                         gotoAndStop("gameover");
  162.                 }

  163.         }
  164. }
复制代码
5、编写AAGun.as类
创建类的方法同第3步。首先选中库中的AAGun元件,打开项目面板创建类。在"将类邦定到库元件"前面打勾,点下"使用所选库元件"的单选按钮。图:邦定库元件


AAGun类:邦定库中的炮元件,向左移动向右移动,检测边界,自动消毁。
  1. package {
  2.         import flash.display.*;
  3.         import flash.events.*;
  4.         import flash.utils.getTimer;
  5.        
  6.         public class AAGun extends MovieClip {
  7.                 static const speed:Number = 150.0;
  8.                 private var lastTime:int; // 控制移动的Timer
  9.                
  10.                 public function AAGun() {
  11.                         // 枪的初始位置
  12.                         this.x = 275;
  13.                         this.y = 340;
  14.                        
  15.                         //运动
  16.                         addEventListener(Event.ENTER_FRAME,moveGun);
  17.                 }

  18.                 public function moveGun(event:Event) {
  19.                         // 得到时差
  20.                         var timePassed:int = getTimer() - lastTime;
  21.                         lastTime += timePassed;
  22.                        
  23.                         // 现在的位置
  24.                         var newx = this.x;
  25.                        
  26.                         // 移动到左边
  27.                         if (MovieClip(parent).leftArrow) {
  28.                                 newx -= speed*timePassed / 1000;
  29.                         }
  30.                        
  31.                         // 移动到右边
  32.                         if (MovieClip(parent).rightArrow) {
  33.                                 newx += speed*timePassed / 1000;
  34.                         }
  35.                        
  36.                         // 检测边界
  37.                         if (newx < 10) newx = 10;
  38.                         if (newx > 540) newx = 540;
  39.                        
  40.                         // 更新位置
  41.                         this.x = newx;
  42.                 }
  43.                
  44.                 // 移除屏幕上的炮和事件
  45.                 public function deleteGun() {
  46.                         parent.removeChild(this);
  47.                         removeEventListener(Event.ENTER_FRAME,moveGun);
  48.                 }
  49.         }
  50. }
复制代码
新建文件Airplane.as
Airplane类:邦定库中的飞机元件。随机产生飞机,随机的速度,产生5种飞机样式,检测是否飞出边界,检测被子弹击中。自动毁灭和爆炸效果。
  1. package {
  2.         import flash.display.MovieClip;
  3.         import flash.events.TimerEvent;
  4.         import flash.utils.Timer;
  5.         import flash.utils.getTimer;
  6.         import flash.events.Event;
  7.        
  8.         public class Airplane extends MovieClip {
  9.                 private var dx:Number; // 飞机的速度、方向
  10.                 private var lastTime:int; // 控制移动的Timer
  11.                 //左右移动
  12.                 public function Airplane(side:String, speed:Number, altitude:Number) {
  13.                         if (side == "left") {
  14.                                 this.x = -50; // start to the left
  15.                                 dx = speed; // fly left to right
  16.                                 this.scaleX = -1; // reverse
  17.                         } else if (side == "right") {
  18.                                 this.x = 600; // start to the right
  19.                                 dx = -speed; // fly right to left
  20.                                 this.scaleX = 1; // not reverse
  21.                         }
  22.                         this.y = altitude; // vertical position
  23.                        
  24.                         this.gotoAndStop(Math.floor(Math.random()*5+1));
  25.                         // set up animation
  26.                         addEventListener(Event.ENTER_FRAME,movePlane);
  27.                         lastTime = getTimer();
  28.                 }
  29.                 //检测边界
  30.                 public function movePlane(event:Event) {
  31.                         // get time passed
  32.                         var timePassed:int = getTimer()-lastTime;
  33.                         lastTime += timePassed;
  34.                        
  35.                         // move plane
  36.                         this.x += dx*timePassed/1000;
  37.                        
  38.                         // check to see if off screen
  39.                         if ((dx < 0) && (x < -50)) {
  40.                                 deletePlane();
  41.                         } else if ((dx > 0) && (x > 600)) {
  42.                                 deletePlane();
  43.                         }
  44.                        
  45.                 }
  46.                
  47.                 // 检测碰撞,子弹击中飞机跳转到帧标签"explode"演示爆炸动画。
  48.                 public function planeHit() {
  49.                         removeEventListener(Event.ENTER_FRAME,movePlane);
  50.                         MovieClip(parent).removePlane(this);
  51.                         gotoAndPlay("explode");
  52.                 }
  53.                
  54.                 // 移除舞台上的飞机和事件
  55.                 public function deletePlane() {
  56.                         removeEventListener(Event.ENTER_FRAME,movePlane);
  57.                         MovieClip(parent).removePlane(this);
  58.                         parent.removeChild(this);
  59.                 }
  60.                
  61.         }
  62. }
复制代码
新建文件Bullet.as
Bullet类:邦定库中的子弹元件。控制子弹的飞行方向,检测子弹是否飞出屏幕。
  1. package {
  2.         import flash.display.MovieClip;
  3.         import flash.events.Event;
  4.         import flash.utils.getTimer;
  5.         import flash.utils.Timer;
  6.         import flash.events.TimerEvent;
  7.        
  8.         public class Bullet extends MovieClip {
  9.                 private var dy:Number; // 子弹的速度、方向。
  10.                 private var lastTime:int;
  11.                
  12.                 public function Bullet(x,y:Number, speed: Number) {
  13.                         // 初始位置
  14.                         this.x = x;
  15.                         this.y = y;
  16.                         // 得到速度
  17.                         dy = speed;
  18.                         // 动画
  19.                         lastTime = getTimer();
  20.                         addEventListener(Event.ENTER_FRAME,moveBullet);
  21.                 }
  22.                
  23.                 public function moveBullet(event:Event) {
  24.                         // 得到时差
  25.                         var timePassed:int = getTimer()-lastTime;
  26.                         lastTime += timePassed;
  27.                        
  28.                         // 子弹运动
  29.                         this.y += dy*timePassed/1000;
  30.                        
  31.                         // 子弹越过屏幕的顶端
  32.                         if (this.y < 0) {
  33.                                 deleteBullet();
  34.                         }
  35.                        
  36.                 }

  37.                 // 移除舞台的子弹和事件
  38.                 public function deleteBullet() {
  39.                         MovieClip(parent).removeBullet(this);
  40.                         parent.removeChild(this);
  41.                         removeEventListener(Event.ENTER_FRAME,moveBullet);
  42.                 }

  43.         }
  44. }
复制代码
所有的类文件完成保存后,回到AirRaid.fla场景,按Ctrl+Enter组合键测试,看看你的成果吧!





评分

参与人数 2 +8 +1 +2 收起 理由
祁连山 + 1 支持原创教程
sanbos + 8 + 2 多谢教程,辛苦了。

查看全部评分

发表于 2010-10-21 12:29:55 | 显示全部楼层
很吸引的内容,努力研究中,谢谢兄弟的贡献!
回复 支持 反对

使用道具 举报

发表于 2011-2-20 09:31:51 | 显示全部楼层
留个印记!
回复 支持 反对

使用道具 举报

发表于 2011-2-24 09:02:29 | 显示全部楼层
天啊 那么多
回复 支持 反对

使用道具 举报

发表于 2011-3-11 12:53:02 | 显示全部楼层
很好,很强大啊
回复 支持 反对

使用道具 举报

发表于 2012-1-4 21:49:29 | 显示全部楼层
就是做元件的时候比较烦
回复 支持 反对

使用道具 举报

发表于 2012-1-4 21:51:24 | 显示全部楼层
上面那个文件加压缩失败哦……
回复 支持 反对

使用道具 举报

发表于 2012-1-4 21:57:04 | 显示全部楼层
求重发源文件……
回复 支持 反对

使用道具 举报

发表于 2012-2-3 13:26:48 | 显示全部楼层
不错不错,很好很好,谢谢分享
回复 支持 反对

使用道具 举报

发表于 2012-2-6 09:52:30 | 显示全部楼层
我还是不太会,下载文件也被损坏,请指教
回复 支持 反对

使用道具 举报

发表于 2012-5-23 09:48:45 | 显示全部楼层
请问lz您能否把这个的源文件发给我一份呢?我不论怎么做都会在最开始的画面来回闪个不停..用的是CS5.5做了5次了还是不行。所以想看看您的源文件,我的邮箱是adamwhy@yahoo.cn,O(∩_∩)O谢谢
回复 支持 反对

使用道具 举报

发表于 2012-6-26 17:54:24 | 显示全部楼层
多谢!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2012-6-26 17:55:45 | 显示全部楼层
解压缩失败
回复 支持 反对

使用道具 举报

发表于 2012-7-16 10:54:11 | 显示全部楼层
多谢了。。。
回复 支持 反对

使用道具 举报

发表于 2012-8-17 18:23:09 | 显示全部楼层
解压缩失败
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | [免费注册]

本版积分规则