Flash游戏制作揭秘──飞行游戏的碰撞测试

IT商界

  在上一期中,我们讲解了子弹以及敌机的复制技术,这期我们将讲解它们之间的碰撞测试。其实在上一期中,我们已经在代码中,为碰撞测试增加了可行性。

  在子弹复制中,我们使用n>=0时n=0,也就是说shot子弹的实例名称为shot1,shot2……直到shot49。而敌机的复制在i>=max时i=0,也就是说敌机的实例名称为pao1,pao2……pao9。这样,我们在制作碰撞测试时,只需要制作一个循环结构,循环测试每一个子弹与敌机之间的碰撞关系,就可以完成子弹射击敌机的程序。

  在碰撞测试中,使用的技术是Flash MX Action Script程序中的HitTest技术,这项技术可以测试两个实例的碰撞关系,但由于HitTest使用的是矩形的测试关系,所以,不要在制作敌机时使敌机的外形过于复杂,除非你使用其他的hit来测试,否则,尽量让敌机看起来类似于矩形,这也算是Flash的Bug之一吧。

  1.进入pao影片剪辑,鼠标右键点击敌机,选择Action选项,在打开的Action面板中添加代码如下:

  onClipEvent(enterFrame){ 

   if(this.hittest(_root.plane))}  

    _root.plane.play() 

    _root.gotoandstop(2) 

  }

  for (j=1;j<50;j++){  

   if (this.hitTest(_root["shot"+j])){   

    _root.fen=_root.fen+1

     this.removeMovieClip()

    }

   }  

  }    

  注:我们将碰撞测试放置在pao影片实例,也就是敌机的原形当中,那么在复制的过程中,所有的复制品都会含有碰撞测试,这样在影片播放过程中,就不会出现某个实例没有测试到的情况了。

  使用onClipEvent测试,当敌机测试到与主机相碰撞时,主机开始播放第2帧,主场景的时间轴跳转到第2帧。

  使用for循环,j=1,当j小于50时,j递增,当测试到与主场景中的shot加j测试时,根目录的fen递增,同时删去这个影片实例。

  Fen就是我们接下来所要制作的记分系统。

  2.在主场景新建一个图层,选取文字输入工具,在Properties面板中选择文字属性为Dynamic Text动态文本框,将文字色彩选为白色,在Var输入框中输入变量名称为fen。在第1帧输入fen=0的代码(图1)。

  3.在主机所在图层的第2帧按F6键,建立一个关键帧,输入代码delete onenterframe(),删去控制函数,使用文字输入工具输入Game Over字样(如图2)。

  4.按Ctrl+Enter键测试,完成游戏(如图3)。

  整个游戏我们算是制作完成了,在Flash制作游戏中,这篇文章可以算是起到了抛砖引玉的工作。其实制作一个像样的游戏并不难,难就难在开始时期的策划和游戏中的模块制作。有时候我甚至注意到,Flash在CPU的资源占用方面会在很大程度上限制游戏的制作,但实际上,每一种游戏的制作平台都会有一些限制,但不必刻意去追求完美,在Flash制作游戏中,尽量避免大量复制和测试,这样就不会出现CPU负担过重的情况了。本实例的源程序请在http://wsmmt.52flash.net/flashgame.fla处下载,请对照源程序慢慢学习,希望大家都能制作出像样的Flash游戏。