手机
当前位置:查字典教程网 >网页设计 >Flash教程 >Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程
Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程
摘要:本例为FlashAS3.0实例教程,介绍射击类游戏的制作,主要分游戏界面的制作和类的编写两部分,从简单的开始做起,跟着教程动手做做看吧(一)...

本例为Flash AS3.0实例教程,介绍射击类游戏的制作,主要分游戏界面的制作和类的编写两部分,从简单的开始做起,跟着教程动手做做看吧

(一)

演示:

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程1

这款游戏可能大家都玩过。敌机在蓝天上来回飞行,左右箭头键控制火炮在草地上左右移动。按下空格键发射子弹,击中敌机后,敌机爆炸。得分:记录击中的敌机数。剩余子弹:记录子弹的数量。

游戏运行过程图:

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程2

全部文件及作用图:游戏文件

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程3

AirRaid.fla程序界面及元件

AirRaid.as文档类 程序的入口。控制整个程序的逻辑顺序,逻辑结构关系。

AAGun.as绑定库中的火炮的类控制火炮

AirPlane.as绑定库中的敌机的类控制飞机

Bullet.as绑定库中的子弹的类控制子弹

UI(界面)部分

AirRaid.fla文件结构

AirRaid.fla文件:是主文件,分为5个图层3帧,帧上有代码,绑定了文档类 AirRaid.as 。图:界面元素

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程4

1、背景层:绘制的蓝天、草地、山峦。

2、成绩显示层:"得分:" 动态文本:实例名 showScore "剩余子弹:" 动态文本:实例名 showShots。

3、按钮及提示层:第1帧:开始按钮及说明,实例名:startButton。第3帧:重新开始按钮及结束提示,实例名 playAgainButton。

4、代码层:3帧每帧都有代码。

5、标签层:第1帧,标签名称:intro 第2帧,标签名称:play 第3帧,标签名称:gameover 。

代码层的每帧代码及解释:

第1帧代码:

复制代码代码如下:importflash.events.MouseEvent;

stop();

startButton.addEventListener(MouseEvent.CLICK,clickStart);

functionclickStart(event:MouseEvent){

gotoAndStop("play");

}

解释:给startButton注册了鼠标点击事件,用clickStart方法来实现,点击startButton按钮就把影片转到第2帧上游戏的进行界面。

第2帧代码:

复制代码代码如下:stop();

startAirRaid();

解释:调用文档类的startAirRaid方法,执行这个方法,就会生成敌机,火炮,接受用户的键盘操作事件来生成子弹等一系列操作。

第3帧代码:

复制代码代码如下:playAgainButton.addEventListener(MouseEvent.CLICK,clickPlayAgain);

functionclickPlayAgain(event:MouseEvent){

gotoAndStop("play");

}

解释:给playAgainButton注册了鼠标点击事件,用clickPlayAgain方法实现,点击playAgainButton按钮跳转到第2帧。

AirRaid.fla文件与文档类的绑定:

绑定文档类:AirRaid.as 图:绑定文档类

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程5

最后打开库看看库中的元件 图:库元件

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程6

AAGun影片剪辑(炮)

AirPlane影片剪辑(飞机)

BasicButton按钮

Bullet影片剪辑(子弹)

说一下AirPlane影片剪辑 图:飞机剪辑

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程7

1-5帧每帧一个飞机图形。第6-9帧爆炸图形,有标签:explode 第10帧有代码。

第10帧代码:

复制代码代码如下:parent.removeChild(this);

stop();

解释:parent 是父容器 this 是自身 removeChild 是移除。这句代码的意思是通知父容器把它从显示界面移除。就是说当子弹击中敌机,敌机播放爆炸效果。播放到第10帧时,就通知它的父容器把它从屏幕上移除。

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

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程8

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

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程9

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

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程10

图:填入类名

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程11

图:类的框架

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程12

4、编写AirRaid.as类

AirRaid.as类:文档类AirRaid类是游戏的控制器,绑定AirRaid.fla 。负责生成界面上的飞机、火炮、子弹。显示得分,子弹的剩余数量。注册了键盘按下,释放侦听器,接收用户的键盘操作。注册了进入帧事件侦听器,进行碰撞检测。定义一个飞机计时器,随机生成飞机。检测剩余子弹的数目,当子弹数为零时也就是主角死亡了,移除界面上的飞机,火炮,跳转到重玩按钮。

复制代码代码如下:package {

import flash.display.MovieClip;;

import flash.display.SimpleButton;

import flash.events.KeyboardEvent;

import flash.utils.Timer;

import flash.events.TimerEvent;

import flash.text.TextField;

import flash.events.Event;

public class AirRaid extends MovieClip {

private var aagun:AAGun;//火炮

private var airplanes:Array;//飞机数组

private var bullets:Array;//子弹数组

public var leftArrow, rightArrow:Boolean;

private var nextPlane:Timer;//不定时生成飞机的计时器

private var shotsLeft:int;//得分文本

private var shotsHit:int;//子弹数文本

public function startAirRaid() {

// 初始化得分数和子弹数

shotsLeft = 20;

shotsHit = 0;

showGameScore();

// 生成炮加入到舞台上

aagun = new AAGun();

addChild(aagun);

// 生成飞机、子弹数组

airplanes = new Array();

bullets = new Array();

// 键盘按下、释放事件侦听器

stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);

stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);

// 进入帧事件侦听器,检测子弹击中飞机的碰撞检测。

addEventListener(Event.ENTER_FRAME,checkForHits);

// 生成下一架飞机

setNextPlane();

}

//不定时生成飞机

public function setNextPlane() {

//1000毫秒至2000毫秒之间生成一架飞机

nextPlane = new Timer(1000 + Math.random() * 1000,1);

//

nextPlane.addEventListener(TimerEvent.TIMER_COMPLETE,newPlane);

nextPlane.start();

}

public function newPlane(event:TimerEvent) {

// 随机的边、速度和高度

if (Math.random() > .5) {

var side:String = "left";

} else {

side = "right";

}

var altitude:Number = Math.random()*50+20;

var speed:Number = Math.random()*150+150;

// 生成飞机

var p:Airplane = new Airplane(side,speed,altitude);

addChild(p);

airplanes.push(p);

// set time for next plane

setNextPlane();

}

// 碰撞检测

public function checkForHits(event:Event) {

for(var bulletNum:int=bullets.length-1;bulletNum>=0;bulletNum--){

for (var airplaneNum:int=airplanes.length-1;airplaneNum>=0;airplaneNum--) {

if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum])) {

airplanes[airplaneNum].planeHit();

bullets[bulletNum].deleteBullet();

shotsHit++;

showGameScore();

break;

}

}

}

if ((shotsLeft == 0) && (bullets.length == 0)) {

endGame();

}

}

// 按下键盘

public function keyDownFunction(event:KeyboardEvent) {

if (event.keyCode == 37) {

leftArrow = true;

} else if (event.keyCode == 39) {

rightArrow = true;

} else if (event.keyCode == 32) {

fireBullet();

}

}

// 释放键盘

public function keyUpFunction(event:KeyboardEvent) {

if (event.keyCode == 37) {

leftArrow = false;

} else if (event.keyCode == 39) {

rightArrow = false;

}

}

// 生成新的子弹

public function fireBullet() {

if (shotsLeft <= 0) return;

var b:Bullet = new Bullet(aagun.x,aagun.y,-300);

addChild(b);

bullets.push(b);

shotsLeft--;

showGameScore();

}

public function showGameScore() {

showScore.text = String("得分: "+shotsHit);

showShots.text = String("剩余子弹: "+shotsLeft);

}

// 从数组获取飞机

public function removePlane(plane:Airplane) {

for(var i in airplanes) {

if (airplanes[i] == plane) {

airplanes.splice(i,1);

break;

}

}

}

// 获取数组的一个子弹

public function removeBullet(bullet:Bullet) {

for(var i in bullets) {

if (bullets[i] == bullet) {

bullets.splice(i,1);

break;

}

}

}

// 游戏结束,移除界面上的东西。

public function endGame() {

// 移除飞机

for(var i:int=airplanes.length-1;i>=0;i--) {

airplanes[i].deletePlane();

}

airplanes = null;

aagun.deleteGun();

aagun = null;

// 移除侦听器

stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);

stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);

removeEventListener(Event.ENTER_FRAME,checkForHits);

nextPlane.stop();

nextPlane = null;

gotoAndStop("gameover");

}

}

}

5、编写AAGun.as类

创建类的方法同第3步。首先选中库中的AAGun元件,打开项目面板创建类。在"将类邦定到库元件"前面打勾,点下"使用所选库元件"的单选按钮。图:邦定库元件

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程13

AAGun类:邦定库中的炮元件,向左移动向右移动,检测边界,自动消毁。

复制代码代码如下:package {

import flash.display.*;

import flash.events.*;

import flash.utils.getTimer;

public class AAGun extends MovieClip {

static const speed:Number = 150.0;

private var lastTime:int; // 控制移动的Timer

public function AAGun() {

// 枪的初始位置

this.x = 275;

this.y = 340;

//运动

addEventListener(Event.ENTER_FRAME,moveGun);

}

public function moveGun(event:Event) {

// 得到时差

var timePassed:int = getTimer() - lastTime;

lastTime += timePassed;

// 现在的位置

var newx = this.x;

// 移动到左边

if (MovieClip(parent).leftArrow) {

newx -= speed*timePassed / 1000;

}

// 移动到右边

if (MovieClip(parent).rightArrow) {

newx += speed*timePassed / 1000;

}

// 检测边界

if (newx < 10) newx = 10;

if (newx > 540) newx = 540;

// 更新位置

this.x = newx;

}

// 移除屏幕上的炮和事件

public function deleteGun() {

parent.removeChild(this);

removeEventListener(Event.ENTER_FRAME,moveGun);

}

}

}

新建文件Airplane.as

Airplane类:邦定库中的飞机元件。随机产生飞机,随机的速度,产生5种飞机样式,检测是否飞出边界,检测被子弹击中。自动毁灭和爆炸效果。

复制代码代码如下:package {

import flash.display.MovieClip;

import flash.events.TimerEvent;

import flash.utils.Timer;

import flash.utils.getTimer;

import flash.events.Event;

public class Airplane extends MovieClip {

private var dx:Number; // 飞机的速度、方向

private var lastTime:int; // 控制移动的Timer

//左右移动

public function Airplane(side:String, speed:Number, altitude:Number) {

if (side == "left") {

this.x = -50; // start to the left

dx = speed; // fly left to right

this.scaleX = -1; // reverse

} else if (side == "right") {

this.x = 600; // start to the right

dx = -speed; // fly right to left

this.scaleX = 1; // not reverse

}

this.y = altitude; // vertical position

this.gotoAndStop(Math.floor(Math.random()*5+1));

// set up animation

addEventListener(Event.ENTER_FRAME,movePlane);

lastTime = getTimer();

}

//检测边界

public function movePlane(event:Event) {

// get time passed

var timePassed:int = getTimer()-lastTime;

lastTime += timePassed;

// move plane

this.x += dx*timePassed/1000;

// check to see if off screen

if ((dx < 0) && (x < -50)) {

deletePlane();

} else if ((dx > 0) && (x > 600)) {

deletePlane();

}

}

// 检测碰撞,子弹击中飞机跳转到帧标签"explode"演示爆炸动画。

public function planeHit() {

removeEventListener(Event.ENTER_FRAME,movePlane);

MovieClip(parent).removePlane(this);

gotoAndPlay("explode");

}

// 移除舞台上的飞机和事件

public function deletePlane() {

removeEventListener(Event.ENTER_FRAME,movePlane);

MovieClip(parent).removePlane(this);

parent.removeChild(this);

}

}

}

新建文件Bullet.as

Bullet类:邦定库中的子弹元件。控制子弹的飞行方向,检测子弹是否飞出屏幕。

复制代码代码如下:package {

import flash.display.MovieClip;

import flash.events.Event;

import flash.utils.getTimer;

import flash.utils.Timer;

import flash.events.TimerEvent;

public class Bullet extends MovieClip {

private var dy:Number; // 子弹的速度、方向。

private var lastTime:int;

public function Bullet(x,y:Number, speed: Number) {

// 初始位置

this.x = x;

this.y = y;

// 得到速度

dy = speed;

// 动画

lastTime = getTimer();

addEventListener(Event.ENTER_FRAME,moveBullet);

}

public function moveBullet(event:Event) {

// 得到时差

var timePassed:int = getTimer()-lastTime;

lastTime += timePassed;

// 子弹运动

this.y += dy*timePassed/1000;

// 子弹越过屏幕的顶端

if (this.y < 0) {

deleteBullet();

}

}

// 移除舞台的子弹和事件

public function deleteBullet() {

MovieClip(parent).removeBullet(this);

parent.removeChild(this);

removeEventListener(Event.ENTER_FRAME,moveBullet);

}

}

}

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

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程14

Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程15

教程结束,希望大家喜欢!

【Flash AS3.0实例教程:教你射击类游戏的制作及解析打飞机游戏的制作过程】相关文章:

Flash引导层动画实例:引导线制作飞舞的蝴蝶

Flash AS3教程:类的分包处理

Flash实例教程:制作GIF动画

Flash AS3教程:小游戏开发实战尝试

Flash AS3教程:实现鼠标跟随炫舞线条动画效果

Flash AS3.0教你射击类游戏的制作

Flash AS3教程:如何快速制作风扇旋转的动画效果

Flash AS3实例教程:快速制作烟雾动画

教你用Flash制作飞舞的螺旋动画特效

Flash教程实例:如何制作别样的绿

精品推荐
分类导航