|
地板
楼主 |
发表于 2012-3-15 11:26:42
|
只看该作者
四、制作敌机
1.一号敌机制作方法
新建一个图层,命名为enemy_a,绘制一个如图13所示的敌机,选中该敌机按F8键,转换成影片剪辑,名称为enemya_mc,实例名也是enemya_mc,双击进入影片剪辑。 在第1帧加入代码stop(),让影片停止播放,新建一个图层,在新图层的第2帧制作一个爆炸的效果,在最后帧加入如下代码,这等于删去上一级影片剪辑,而分数再加上100。
removeMovieClip(_parent._parent)
_root.score+=100
再次新建一个图层,在第2帧放入fx13431_bomb8.mp3音乐文件,记得要使用stream数据流的方式,双击空白区域回到场景。
在场景中选中该影片剪辑,放置在场景以外的左上角,再次按F8键转换成影片剪辑,名称为enemya_eft,实例名为enemy_a,进入影片剪辑,在图层1上加入一个引导图层,使用绘图工具绘制一条曲线,如图14所示。 将两个图层都延缓到第60帧,将第1帧的敌机放置在引导线的起始,在最后1帧将敌机放置到引导线的结尾,建立Motion动画,在最后1帧加入removeMovieClip(_parent)代码,删去上一级影片剪辑。这也就是说,无论敌机是被击爆的,还是飞行结束,它都将消失,所不同的就是加不加分而已。
2.一号敌机的复制方法
回到场景,选中敌机按F8键转换成影片剪辑,名称为enemya,实例名称为enemy_a,选取后再次按F8键转换成影片剪辑,名称为enemy_a,实例名称为enemya。双击进入影片剪辑。
在第10帧按F5键,新建一个图层,在第1帧,加入代码:
enemya_i=0
enemya_max=10
enemya._visible=0
代码说明:
Enemya_i变量等于0,enemya_max变量等于10,而敌机为不显示。
在图层2的第2帧加入代码:
if(enemya_i<ENEMYA_MAX){< p>
enemya.duplicateMovieClip("enemya"+enemya_i,enemya_i)
this["enemya"+enemya_i]._x=random(650)
this["enemya"+enemya_i]._y=enemya._y-random(200)+100
enemya_i++
}
if(enemya_i>=enemya_max){
enemya_i=0
}
代码说明:
当enemya_i变量小于enemya_max时,Enemya影片剪辑开始复制,复制品的X坐标等于650的随机数,复制品的Y坐标等于敌机的Y坐标减去200的随机数再加上100;Enemya_i变量递增;当enemya_i变量大于等于enemya_max变量时,它的值为0。
在第10帧加入代码gotoAndPlay(2),这样就可以完成复制,让每10帧,就复制一个敌机。
3.一号敌机碰撞测试
右键点击敌机,选择“动作命令”,为对象加入如下代码:
onClipEvent(enterFrame){
if(this.hitTest(_root.plane.plane_mc.plane_hit)){
this.enemy_a.enemya_mc.play()
this.enemy_a.enemya_mc._x=this.enemy_a.enemya_mc._x
this.enemy_a.enemya_mc._y=this.enemy_a.enemya_mc._y
_root.plane.play()
}
if(this.hitTest(_root.missile)){
this.enemy_a.enemya_mc.play()
this.enemy_a.enemya_mc._x=this.enemy_a.enemya_mc._x
this.enemy_a.enemya_mc._y=this.enemy_a.enemya_mc._y
}
for (j = 1; j<50; j++) {
if (this.hitTest(_root["shot"+j])) {
this.enemy_a.enemya_mc.play()
this.enemy_a.enemya_mc._x=this.enemy_a.enemya_mc._x
this.enemy_a.enemya_mc._y=this.enemy_a.enemya_mc._y
}
}
}
代码说明:
当敌机影片剪辑开始播放时执行;当敌机碰撞到主控飞机时,enemy_a影片剪辑中的enemya_mc影片剪辑开始播放,也就是爆炸动画。此时它将不再移动,主控飞机也将爆炸。当它碰撞到导弹时,它的爆炸动画开始播放,它的坐标也将不会再运动了。当j=1,而且j小于50时,j递增,这句实际上是每帧执行50次的一个代码,也就是子弹的碰撞测试,因为子弹是使用的复制品,实例名称有50个,所以,以下代码有点变化,当它碰撞到“"shot"+j”这个数组时,也就表示它碰撞到50个子弹中任意的一个时,它的爆炸动画开始播放。
4.二号敌机制作方法
二号敌机与一号敌机制作方法基本相同,依照相同的方法,我们制作一个enemy_b的影片剪辑,绘制的敌机如图15所示。 依照与一号敌机相同的制作步骤制作,区别仅仅是引导线,如图16所示。它将从左侧按弧线飞行到右上角。 二号敌机的碰撞代码也与一号敌机相类似,可以参考一号敌机,也可以对照源程序。在场景中,二号敌机的实例名称为enemyb。在二号敌机的第1帧加入代码stop(),因为这个敌机在一开始的时候,并不会出现,等到分数值到了一定程度,才会出现。
回到场景中,我们在主控飞机的代码中,加入如下代码:
if(score>=10000){
enemyb.play()
}
if(score>=20000){
gotoAndStop(2)
}
if(_root.planenum_mc._currentframe<2){
gotoAndStop(3)
}
代码说明:
当分数大于等于10000时,二号敌机开始播放,当分数大于等于100000,场景跳转到第2帧,当飞机数量的影片剪辑当前帧小于2时,场景跳转到第3帧。
5.BOSS敌机子弹制作
现在开始制作BOSS敌机了,先来制作一些准备工作,导入f8f158.mp3音乐文件。在“库”面板中,右键选取该音乐文件,选择“链接”命令,在出现的对话框中选择“为动作脚本导出”选项,在输入框中输入sound2,将这个音乐文件输出。
在主控飞机的代码中,第1行,加入如下代码:
mysound=new Sound()
mysound.attachSound("sound2")
mysound.start(0,10000)
代码说明:
Mysound是新的音乐对象,这个音乐对象将绑定sound2音乐文件,而且它开始播放10000遍。
新建一个图层,名称为foeshot。绘制一个椭圆形的渐变在场景中,这其实就是敌机的子弹。它的坐标是X:0,Y:0。如图17所示。 双击进入影片剪辑,将坐标调整为0,再次转换成影片剪辑,在第125帧建立关键帧,将其的坐标调整为X:800,Y:0,在第1帧建立动画,在最后1帧加入removeMovieClip(this)代码,让它删除自己。
双击空白区域,回到上一级影片剪辑,为子弹效果起实例名称为foeshot,新建一个图层,在第1帧加入如下代码,变量foe_i等于0,foe_max等于10,而子弹的显示参数为0。影片剪辑停止播放。
foe_i=0
foe_max=10
foeshot._visible=0
stop()
在第2帧加入如下代码:
if(foe_i<FOE_MAX){< p>
foeshot.duplicateMovieClip("foeshot"+foe_i,foe_i)
this["foeshot"+foe_i]._x=_root.boss.boss_mc._x+_root.boss.boss_mc._width/2
this["foeshot"+foe_i]._y=_root.boss.boss_mc._y+_root.boss.boss_mc._height
this["foeshot"+foe_i]._rotation=(180/Math.PI)*Math.atan2((_root.plane._y-this["foeshot"+foe_i]._y),(_root.plane._x-this["foeshot"+foe_i]._x))
foe_i++
}
if(foe_i>=foe_max){
foe_i=0
}
代码说明:
当foe_i小于foe_max时,子弹开始复制,这些复制品的X坐标等于BOSS飞机中的BOSS飞机影片剪辑的宽度除以2,复制品的Y坐标等于BOSS飞机的高度,而复制品旋转的角度,套用一个弧度换角度的几何公式,正好跟随着主控飞机的坐标,foe_i递增。当foe_i大于等于foe_max时,它等于0。
给子弹的对象加入如下代码:
onClipEvent(enterFrame){
if(this.hitTest(_root.plane.plane_mc.plane_hit)){
this.gotoAndStop(125)
_root.plane.play()
}
if(this.hitTest(_root.missile)){
this.gotoAndStop(125)
}
}
代码说明:
当影片开始播放时执行,如果子弹碰撞到主控飞机,那么它将直接跳转到第125帧,如果它碰撞到导弹就删去自己。
6.BOSS敌机碰撞测试
回到场景中,绘制一个敌机,如图18所示。转换成影片剪辑BOSS,实例名相同,在影片剪辑中尽量把它缩放的大一些,然后选取按F8转换成影片剪辑,命名为boss_mc,实例名相同。
在boss_mc影片剪辑,制作BOSS主机的爆炸动画,可以同一号敌机的爆炸差不多,在第1帧加入stop()代码,在第2帧加入_root.foe.gotoAndStop(1)代码,双击回到上一级影片剪辑,制作一段动画,让它循环左右移动,在开始移动的这一帧加入_root.foe.play()代码,让子弹程序开始播放。
回到场景中,在第2帧加入如下代码:
_root.bosslife=5000
_root.boss.onEnterFrame=function(){
for(i=0;i<50;i++){
if(_root.boss.boss_mc.hitTest(_root["shot"+i])){
_root.bosslife--
_root["shot"+i].removeMovieClip()
}
}
if(bosslife<=0){
_root.boss.stop()
_root.boss.boss_mc.boss_eft.play()
}
if(_root.boss.boss_mc.hitTest(_root.missile)){
_root.bosslife--
}
}
代码说明:
Bosslife变量等于5000;当影片开始播放时执行代码;i等于0时,i小于50时,i递增;当BOSS主机碰撞到主控飞机的子弹时,Bosslife开始递减,也就是BOSS主机的生命开始递减;而子弹将被删去;当bosslife的值小于等于0时,BOSS影片剪辑停止播放,也就不再移动,而BOSS主机的爆炸动画将开始播放。当BOSS主机碰撞到导弹时,它的生命也将递减。
在场景中第3帧加入stop()、stopAllSounds()代码,停止所有音乐,使用文字输入工具输入GAME OVER字样,再制作一个按钮,按钮内容为:
On(press){
gotoAndPlay("Scene 1",1)
}
让游戏回到开始界面。
至此,该游戏基本制作完成,虽然它看起来只像是一个雏形,但却已经具备了一个小型游戏的全部功能。通过这个游戏的制作,你可能已经能够感受到,制作大型游戏,无非就是在这样的代码基础上,增加更多的内容和场景,以及人物,声音,动画,效果等。 |
|