用新浪微博登录

只需一步,快速搞定

 找回密码
 立即注册

用新浪微博登录

只需一步,快速搞定

查看: 2490|回复: 1
打印 上一主题 下一主题

Flash游戏制作实例--空战

[复制链接]

该用户从未签到

667

主题

2111

帖子

5570

积分

LV 11.会员

MS爱好者!!!!

积分
5570

社区居民偶尔光临工蜂最爱沙发在线达人社区平民做个有钱人略有小成常驻会员忠实会员

跳转到指定楼层
楼主
发表于 2012-3-15 11:13:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 |          
   射击类游戏一直是Flash游戏制作中的一个热点,大多数Flash射击游戏都是都是纵版的,也就是游戏背景的前进方向是垂直的,这样的游戏已经司空见惯了。所以这次我们来制作一个横版的射击游戏,游戏背景和飞机的运动方向都是水平的。
游戏运行后的主界面如图1所示:

图1
游戏说明:
此游戏玩家是以第一视角的模式来进行的,所谓第一视角就是游戏的界面相当于玩家的双眼,通过这样的形式,可以使游戏达到一种非常逼真的效果,仿佛您已经置身于激烈的游戏之中了。游戏中玩家可以使用鼠标控制屏幕中的瞄准镜,瞄准并射击从左边随机出现的敌机,飞机会以各种路线在空中飞行以避开你的射击,如果敌机被射中后,就会从空中跌落下来,相应的玩家会得一分,在游戏规定的100秒内,尽量击落更多的敌机。
制作步骤:
一:游戏中相应元件的制作
1.既然是空战游戏,自然少不了飞机,所以首先来制作游戏中的敌机。在影片中新建一个Graphic元件,,命名为gPlane,进入元件的编辑状态后,可以从外部导入一张飞机的图片,然后将其分离,稍稍加工一下即可。或者使用Flash提供的强大的绘图工具自己绘制一架飞机,如图2所示:

图2
有了飞机,还需要一个飞行员飞机才可以工作,所以再建一个Graphic元件,命名为gMan,进入元件编辑状态后,使用椭圆绘图工具绘制一个简单的人头即可,如图3所示:

图3
接下来就需要将飞机和飞行员组合到一起了,因为游戏中需要使用Action动作脚本对飞机进行控制,所以需要将最终的组合体制作成Movie clip元件,所以再新建一个Movie clip元件,进入元件的编辑状态后,将元件gMan和Gplane分别拖到编辑区,使用鼠标调整其相对位置,如图4所示:

图4
这样,一架逼真的战斗机就制作完成了。

2.飞机飞行动画的制作:
游戏中飞机是从游戏窗口左边随机出现的,但是飞机的飞行路线是事先确定好的,我们可以在制作过程中按照实际需要制作一些飞机沿一定路线飞行的Motion动画,使用Guide Line引导线可以很方便的实现,然后在游戏中分别调用即可,本游戏预先制作了三中不同的飞行路线,这里以其中一种举例说明,其它的制作方法完全类似。
新建一个Movie clip元件,命名为mPlane1,进入元件的编辑状态后,在图层layer1的上面插入一个引导层,在引导层上使用铅笔工具随意绘制一条曲线,然后将图层延续到第120桢,如图5所示:

图5
然后将元件mPlane拖到图层layer1的第1关键桢,放置到曲线的左边的开始端点,飞机会自动吸附到此端点,接着在属性面板中设置飞机的Instance name为airplane。在第120桢插入一个关键祯,同样的将飞机拖到曲线的右边的端点,也会自动吸附上去,最后,在第1祯到第120祯的任意祯上单击鼠标右键,选取Creat Motion Tween命令即可,这样就创建了飞机从曲线的左端点沿曲线运动到右端点的运动效果。最后还需要添加一个图层Action,用来设置Action动作脚本,在第1桢添加如下as:
var planeDepth=_root.pDepth;
在最后一桢(120祯)添加如下as:
_root.numPlane--;
this.removeMovieClip();
按照同样的方法分别制作元件mPlane2和mPlane3,和mPlane1的唯一不同点就是引导层的曲线不一样。

3.制作瞄准镜:
游戏中玩家可以控制的唯一对象就是瞄准镜,可以用它瞄准并射击敌机,新建一个Movie clip元件,命名为mPointer,在编辑区中使用椭圆工具绘制一个正圆,然后在正圆中绘制四条方向不同的直线即可,如图6所示:

图6

4.云彩的制作:
既然是空战,天空中当然少不了白云,并且适当的在游戏中加入白云这样的对象,可以使游戏更生动和逼真,游戏中的白云是使用Action动作脚本随机复制并进行控制的,所以这里我们新建一个Movie clip元件,命名为mCloud,进入元件编辑状态后,使用铅笔工具的Ink绘制模式,绘制一个弯曲的闭合区域,并将图层延续到第5祯,如图7所示:

图7
接下来需要添加复制和控制白云的Action动作脚本,新建一个图层,分别在第1,3,5三祯插入三个关键祯,给第一祯添加如下AS:
this._x = 575;
this._y = 30+random(300);
speed = 2+random(5);
给第3祯添加如下AS:
this._x -= speed;
给第5祯添加如下AS:
if (this._x<-35) else {
gotoAndPlay (_currentframe-2);
}

5.飞机被击落的效果:
游戏中飞机如果被击落,如果简单的来做,只需要设置飞机消失即可,不过为了增强游戏的观赏性,我们这里专门来设计以下飞机被击落的效果,而且会带有爆炸的声音。
新建一个Movie clip元件,命名为mDown,进入元件的编辑状态后,首先添加三个图层分别为down,planedown和explord,在图层explord的第一祯绘制一个如图8所示的多角形,并填充上适当的颜色:

图8
然后在第3祯插入一个关键祯,在属性面板上设置此多角形的Alpha透明度值为15%,最后建立第1到第3祯的Motion运动过渡,这样就实现了飞机被击中的瞬间爆炸的效果。
接下来制作飞机下落的效果。在图层planedown的第2祯插入一个关键祯,将元件Mplane拖进编辑区,使用旋转工具将飞机旋转90度,使飞机头冲下,然后在第10祯插入一个关键祯,将飞机向下移动一段直线距离,并适当降低飞机的Alpha透明度值,最后建立第2祯到第10祯的Motion运动过渡效果,这样飞机被击中后下落并消失的效果也有了。
不过如果飞机在下落过程中, 能有冒烟的效果就更完美了。所以我们在图层down的第4祯插入一个关键祯,然后使用椭圆工具绘制个竖直的扁椭圆,并填充上黑色,在第10祯插入关键祯,调整椭园的形状并设置降低其透明度,同样建立一个Motion运动过渡效果。
然后插入一个图层sound,用来设置飞机下落的声音效果,从外部导入一个爆炸的音效,然后选中图层sound,从属性面板的sound下拉列表中选择所导如的身影,最后将此层也延续到第10祯,时间线如图9所示:

图9
最后还要添加一些Action动作脚本对其加以控制。新建一个图层ACTION,在第1,2,和10祯分别插入一个关键祯,然后给第一祯添加如下AS:
this._x = _root.expX;
this._y = _root.expY;
给第2祯添加如下AS:
this._x=_root.expX;
this._y=_root.expY;
给第10祯添加如下As:
this.removeMovieClip();

6.制作记时器:
游戏是有一定时间控制的,所以还需要添加一个记时器,使用动态文本可以方便的实现,新建一个Movie clip元件,命名为mTime,在元件编辑状态下,使用文本工具绘制一个矩形文本框,然后在属性面板中设置其为Dynamic动态文本,这样就可以用Action对其中的内容加以控制了,设置其变量名为rTime,然后在文本框前面输入提示信息,如图10所示:

图10
然后新建一个层,在第一祯添加如下AS:
now = new Date();
//新建一个Date对象
startTime = now.getTime();
//设置开始时间为系统时间
playTime = _root.playTime;
rTime = playTime;
在第三祯添加如下AS:
now = new Date();
currentTime = now.getTime();
rTime = playTime-int((currentTime-startTime)/1000);
if (!rTime) {
_root.gotoAndPlay("reStart");
stop ();
}
//显示并控制记时器中的时间
在第5祯添加如下AS:
gotoAndPlay (_currentframe-2);
到此为止,游戏中需要的元件大部分准备好了,下面就可以开始布置主场景了。
回复

使用道具 举报

该用户从未签到

667

主题

2111

帖子

5570

积分

LV 11.会员

MS爱好者!!!!

积分
5570

社区居民偶尔光临工蜂最爱沙发在线达人社区平民做个有钱人略有小成常驻会员忠实会员

沙发
 楼主| 发表于 2012-3-15 11:20:50 | 只看该作者
二:布置主场景
1.首先将默认图层layer1重命名为background,使用矩形工具绘制一个和舞台一样大小的矩形,并填充上天蓝色,将图层延续到第50祯。
2.新建两个图层分别为start和gun,在start图层上用来设置游戏的开始界面,使用文本工具输入游戏的名称,并将瞄准器放置到图层gun 中,并在属性面板中设置瞄准器的Instance name为pointer,如图11所示:

图11
3.在图层gun的第22祯插入关键祯,输入游戏时间已到的消息,如图12所示;

图12
4.新建一个图层命名为score&time,用来放置记分器和记时器,将记时器mTime放到舞台下面靠右的位置,然后在下面靠左的位置绘制一个动态文本框,设置其变量名为score,用来记录游戏的得分,如图13所示:

图13
三:给游戏添加Action动作脚本
最后的游戏就是添加Action动作脚本了。
新建一个图层,命名为ACTION,设置第2祯的祯标签为start, 设置第9祯的祯标签为dup, 设置第15祯的祯标签为gotoDup, 设置第22祯的祯标签为reStart.
在第一祯添加如下AS:
Mouse.hide();
startDrag("/pointer", true);
//游戏开始前,首先隐藏鼠标,然后使瞄准器变为可拖动状态
sShoot = new Sound();
sShoot.attachSound("sShoot");
//新建一个sound声音对象,然后从外部导入射击的音效Sshoot,使用attachsound方//法将此声音绑定
sExp = new Sound();
sExp.attachSound("sExp");
////新建一个sound声音对象,然后从外部导入射击的音效Sexp,使用attachsound方//法将此声音绑定
stop();
在第2祯添加如下AS:
score = 0;
//设置初始得分为0
playTime = 100;
//设置游戏时间为100秒
var expX;
var expY;
//定义两变量,代表飞机的坐标
cDepth = 100;
pDepth = 0;
numPlane = 0;
numCloud = 0;
//定义变量,分别代表飞机和云的深度和数量
_root.attachMovie("mP", "pointer", 300);
startDrag("/pointer", true);
在第9祯添加如下AS:
if (Math.random()<0.2 && numCloud<5) {
numCloud++;
_root.attachMovie("mCloud", "c"+cDepth, cDepth);
cDepth = (++cDepth)%100+100;
}
//复制白云
if (Math.random()<0.3 && numPlane<7) {
_root.attachMovie("mPlane"+(1+random(3)), &quot"+pDepth, pDepth);
numPlane++;
with (eval("/p"+pDepth)) {
_x = -20-random(120);
_y = 150+random(60);
}
pDepth = (++pDepth)%100;
}
//复制飞机,并使用随机函数设置飞机出现的坐标
在第15祯添加如下AS:
gotoAndPlay("Dup");
//返回到祯Dup复制飞机
在第22祯添加如下AS:
_root.pointer.removeMovieClip();
//游戏结束后,从游戏中删除瞄准器
在第50祯添加如下AS:
Mouse.show();
//显示鼠标
for (i=0; i<100; i++) {
removeMovieClip ("/c"+(100+i));
removeMovieClip ("/p"+i);
}
stop ();
//删除游戏中所有复制出来的飞机和白云
最后的时间线如图14所示:

图14
到这里,一款精彩的空战射击游戏就制作完成了,您可以按照相似的制作方法,制作一款比较传统的纵版射击游戏。此实例其实是设计空战类射击游戏的通用思路,其它飞行射击游戏其实是在此基础上扩展成的,所以还可以进一步丰富游戏的功能,加强游戏的可玩性。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

     
    Archiver|手机版|小黑屋|( 沪ICP备12034951号 )

GMT+8, 2024-4-28 01:55 , Processed in 0.156060 second(s), 29 queries .

© 2001-2011 Powered by Discuz! X3.1

快速回复 返回顶部 返回列表