flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

更新时间:15-10-23 10:30 热度:309
 

本例为flash as3.0实际的例子教程,绍介射击类游戏的制造,主要分游戏界面的制造和类的编著两局部,采取简单的办法办理单的着手做起,跟着教程动手做做看吧

(一)

演习:

15102310305275066163932 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

这款游戏有可能大家都玩过。敌机在蓝天空往返飞行,左右箭头键扼制大炮在草坪上左右移动。按下空格键发射枪弹,击中敌机后,敌机爆炸。得分:记录击中的敌机数。剩下枪弹:记录枪弹的数目。

游戏运行过程图:

15102310305420374553686 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

所有文件及效用图:游戏文件

15102310305454646013063 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

airraid.fla手续界面及元件
airraid.as文档类 手续的入口。扼制整个儿手续的思维规律顺着次序,思维规律结构关系。
aagun.as绑定库中的大炮的类扼制大炮
airplane.as绑定库中的敌机的类扼制飞机
bullet.as绑定库中的枪弹的类扼制枪弹

ui(界面)局部
airraid.fla文件结构
airraid.fla文件:是主文件,分为5个图层3帧,帧上有代码,绑定了文档类 airraid.as 。图:界面元素

15102310305464056800219 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

1、环境层:画出的蓝天、草坪、连绵的山。
2、绩效显露层:"得分:" 动态文本:实际的例子名 showscore "剩下枪弹:" 动态文本:实际的例子名 showshots。
3、按键及提醒层:第一帧:着手按键及解释明白,实际的例子名:startbutton。第3帧:从新着手按键及终了提醒,实际的例子名 playagainbutton。
4、代码层:3帧每帧都有代码。
5、标签层:第一帧,标写名字称:intro 第2帧,标写名字称:play 第3帧,标写名字称:gameover 。

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

第一帧代码:

复制代码

代码如下所述:

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 图:绑定文档类

15102310305476587086329 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

最终敞开库看看库中的元件 图:库元件

15102310305484362028863 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

aagun影片儿剪接(炮)
airplane影片儿剪接(飞机)
basicbutton按键
bullet影片儿剪接(枪弹)

说一下子airplane影片儿剪接 图:飞机剪接

1510231030549061126774 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

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

第一0帧代码:

复制代码

代码如下所述:

parent.removechild(this);
stop();

诠释:parent 是父器皿 this 是自身 removechild 是移除。这句代码的意思是通告父器皿把它从显露界面移除。就是说当枪弹击中敌机,敌机播放爆炸效果。播放到第一0帧时,就通告它的父器皿把它从荧幕上移除。
1、首先敞开flash cs4 (cs3、cs4或cs5没关系大的差别)新建项目,按确认。敞开项目面板。图:新建项目、

15102310305498428259596 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

2、点击右面的第1个三角学按键(项目),在下拉点菜单入选"新建项目"。在弹出新建项目面板项目名字:填入项目名字。在根文件夹:项中点击右面的浏览按键,浏览到准备储存安放项目标目次,按确认。在actionscript版本:选actionscript 3.0 。裸机"开创项目"按键,这么项目就建好了。图:项目面板

1510231030559322701085 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

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

15102310305521852987196 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

图:填入类名
15102310305529627929729 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

图:类的框架
1510231030553752872263 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

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 = 门里出身;
aagun.deletegun();
aagun = 门里出身;
// 移除侦听器
stage.removeeventlistener(keyboardevent.key_down,keydownfunction);
stage.removeeventlistener(keyboardevent.key_up,keyupfunction);
removeeventlistener(event.enter_frame,checkforhits);
nextplane.stop();
nextplane = 门里出身;
gotoandstop(“gameover”);
}
}
}

5、编著aagun.as类

开创类的办法同第3步。首先选中库中的aagun元件,敞开项目面板开创类。在"将类邦定到库元件"面前打勾,点下"运用所选库元件"的单选按键。图:邦定库元件

15102310305545377714795 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

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组合键测试,看看你的成果吧!

15102310305551569002995 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

1510231030555788100907 flash as3.0实际的例子教程:教你射击类游戏的制造及解析打飞机游戏的制造过程

教程终了,期望大家喜欢!