选择显示字体大小

flash游戏制作:弹力球

  弹力球是一个很有趣的小游戏,有点像我们玩的乒乓球,不过这个游戏里玩家只有你一个,你必须尽力用鼠标去控制滑板将小球反弹回去,千万不能碰到四周的墙壁,否则游戏以失败而告终。每成功将小球反弹一次将得到50分,而每碰到一次墙壁会扣掉500分,玩家在每次游戏中一共有六次机会。

  游戏界面如图1所示:

flash/swflash.cab#version=6,0,29,0" width="300" height="330"> flash/yl-020710-ball.swf"> flash/index2//flash/yl-020710-ball.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="300" height="330">

图1

  注意:当你的鼠标在游戏范围内时,鼠标中心的水平和垂直延长线决定左右挡板和上下挡板中心的位置。

  下面我们就开始具体的游戏制作。

  启动flash,新建一个影片,然后选取modify/document菜单命令,在弹出的document properties面板中如图2所示设置影片的属性:


图2

  我们分以下三个大步骤制作,文章末尾提供.fla源文件下载学习。

  一、游戏基本元素的准备

  本步骤我们首先要准备好在游戏中要用到的一些元素和素材。

  1.先我们来制作游戏中的主角,弹力小球。选取insertànew symbol菜单命令,在弹出的create new symbol面板中设置组件类型为movie clip,并给组件取名为ball,如图3所示:


图3

  2.在组件ball的编辑区内,用椭圆工具画一个正圆形,然后用填充工具填充上适当的颜色,颜色可以根据自己的喜好进行选择,本例中我们将小球填充为草绿色,填充好的小球如图4所示:


图4

  3.接下来制作游戏中的挡板。还是选取insertànew symbol菜单命令,在弹出的create new symbol面板中设置组件类型为movie clip,并给组件取名为horizontal paddles,即水平挡板,在组件horizontal paddles的编辑区内,用矩形工具画一个长的圆角矩形,并填充上草绿色,然后将其放置到坐标为(-39.5,143.0)处(具体坐标值可以在properties面板中设置),如图5所示:


图5

  4.按照同样的方法制作一个一模一样的圆角矩形,将其放置到坐标为(-39.5,128.3)的位置,最后如图6所示:


图6

  5.按照制作组件horizontal paddles一样的方法,制作一个movie clip组件vertical paddles,不同之处是此组件是垂直挡板,我们完全可以将组件horizontal paddles旋转90度后,就可以得到所要的效果,如图7所示:


图7

  6.因为游戏中我们需要用鼠标控制水平和垂直挡板,所以就需要将鼠标坐标值传递给挡板,所以我们需要做一个空的mc,来充当这个间接传递坐标的任务。选取insert/new symbol菜单命令,在弹出的create new symbol面板中设置组件类型为movie clip,并给组件取名为mouse tracker,仅此而已,不需要进行其它任何工作。

  7.当然游戏中也少不了一些按钮,本游戏我们需要一个重新开始的按钮,风格和样式可以自己选择,本实例中我们的重玩按钮如图8所示:


图8

  到目前为止,我们游戏的准备工作就告一段落了,接下来是游戏中最最关键的一步,action控制代码的添加。
  二、游戏action控制代码的添加

  1.为了方便我们对游戏进行修改和调试,我们一般都需要把大部分的控制代码专门放到一个独立的mc中,这也是一个制作的好习惯。

  2.选取insertànew symbol菜单命令,在弹出的create new symbol面板中设置组件类型为movie clip,并给组件取名为paddle controller。

  3.在组件paddle controller的编辑状态下,我们新建两个图层layer2和layer3,连上组件莫认的layere1,一共有三个独立的图层。

  4.在图层layer2上,我们使用文本工具在编辑区中画两个大小适中的文本框,如图9所示:


图9

  5. 在properties面板中分别设置这两个文本框为dynamic text类型,即动态文本框,左边的文本框我们用来显示得分,右边的文本框我们用来显示剩余的生命,所以分别在properties面板中设置它们的变量名var为score和lives,如图10和图11所示:


图10


图11

  6.然后将图层layer2延续到第22帧。

  7.在图层layer3上输入文本get ready,作为游戏开始的提示信息,并将此帧延续到第18帧,如图12所示:

图12

  8.在图层layer3的第19,20,21三帧分别插入三个空白关键帧,然后在第22帧插入关键帧,从图库中将前面做好的重玩按钮放到编辑区中,如图13所示:

图13

  9.并给重玩按钮添加as:

  on (release) {
    score = 0;
    lives = 5;
    gotoandplay(1);
  }
  //初始化游戏得分和生命值,并且跳到第一帧重新开始游戏

  10.回到图层layer1,在第1帧,第20帧和第21帧插入三个关键帧,给第1帧添加如下as:

  xstep = number(random(5))+6;
  ystep = number(random(5))+3;
  //设置两个随机变量,其中xstep的范围是6-11,ystep的范围是3-8,random(n)这个随//机函数会产生一个从0到n的随机数
  xmodifier = random(10);
  ymodifier = random(10);
  //设置两也随机变量,范围都是从0到10
  if (number(xmodifier)>5) {
    xstep = xstep-(xstep*2);
  }
  if (number(ymodifier)>5) {
    ystep = ystep-(ystep*2);
  }
  //根据xmodifier和ymodifier这两个随机树取值的不同,对xstep和ystep两变量值//进行修改
  if (number(lives) == 0) {
    gotoandstop(22);
  }
  //如果lives值等于0,即生命值为0,则游戏结束,跳到第22帧也就是游戏结束画面

  11. 第20帧添加如下as

  horx = getproperty("/mousetrack", _x);
  setproperty("/hor", _x, eval("horx"));
  //取得对象mousetrack的横坐标,并赋给水平挡板hor,这样就控制了水平挡板和鼠标//的横坐标始终相等,使它们保持在一条垂直线上
  verty = getproperty("/mousetrack", _y);
  if (number(verty)<245) {
    setproperty(&quot;/vert&quot;, _y, eval(&quot;verty&quot;));
  } else {
    setproperty(&quot;/vert&quot;, _y, 245);
  }
  //设置垂直挡板的位置,并且规定了挡板的最大纵坐标值为245
  ballx = getproperty(&quot;/ball&quot;, _x);
  setproperty(&quot;/ball&quot;, _x, number(ballx)+number(int(xstep)));
  bally = getproperty(&quot;/ball&quot;, _y);
  setproperty(&quot;/ball&quot;, _y, number(bally)+number(int(ystep)));
  //设置弹力小球的坐标值,经过一系列计算后,产生了一个随机的坐标值

  12. 第21帧添加如下as

  lose = 0;
  leftconstraint = getproperty(&quot;/hor&quot;, _x)-47;
  rightconstraint = number(leftconstraint)+94;
  upperconstraint = getproperty(&quot;/vert&quot;, _y)-47;
  lowerconstraint = number(upperconstraint)+94;
  yaccel = verty-getproperty(&quot;/mousetrack&quot;, _y);
  xaccel = horx-getproperty(&quot;/mousetrack&quot;, _x);
  //定义一系列变量,leftconstraint,rightconstraint,upperconstraint,lowerconstraint
  //设置了小球所能活动的范围
  if (number(getproperty(&quot;/ball&quot;, _y))>270 or number(getproperty(&quot;/ball&quot;, _y))<30) {
    if ((number(getproperty(&quot;/ball&quot;,_x))>number(leftconstraint)) and (number(getproperty(&quot;/ball&quot;, _x)){
      ystep = ystep-(ystep*2);
      xstep = int(xstep-(0.15*xaccel));
      score = number(score)+50;
    } else {
      lose = 1;
    }
  }

  //此段程序判断小球是否碰到了水平挡板上,如果碰到了,则分数加50,然后设置小//球的反弹坐标,否则,标志位lose记为1,说明碰到了墙壁

  if (number(getproperty(&quot;/ball&quot;, _x))>270 or number(getproperty(&quot;/ball&quot;, _x))<30) {
    if ((number(getproperty(&quot;/ball&quot;,_y))>number(upperconstraint)) and (number(getproperty(&quot;/ball&quot;, _y)){
      xstep = xstep-(xstep*2);
      ystep = int(ystep-(0.15*yaccel));
      score = number(score)+50;
    } else {
      lose = 1;
    }
  }
  //此段程序判断小球是否碰到了垂直挡板上, 如果碰到了,则分数加50,然后设置小//球的反弹坐标,否则,标志位lose记为1,说明碰到了墙壁。

  if (number(lose) == 0) {
    gotoandplay(20);
  } else {
    setproperty(&quot;/ball&quot;, _x, 150);
    setproperty(&quot;/ball&quot;, _y, 150);
    lives = lives-1;
    score = score-500;
    gotoandplay(1);
  }
  //若没有让小球触到墙壁,即lose的值为0,则回到第20帧,继续游戏,如果小球触到了墙壁,则重新设置小球的位置,并且分数减去500,生命值扣掉1,回到第一帧开始游戏

  13.最后的时间线如图14所示,到这里,本游戏中最关键的action就添加完了,下面我就可以开始布置主场景了。


图14

  三、游戏场景的布置

  1.回到主场景中,新建立layer2到layer4四个图层。

  2.在图层layer1中,我们铺上一幅游戏背景图,可以自己在flash中画,也可以从外部导入一幅图片,如图15所示:


图15

  3.在图层layer2中,将组件mouse tracker拖到舞台上,作为传递鼠标值的中间角色,并在properties面板中给其命名为mousetrack。

  4.在图层layer3中,分别将组件horizontal paddles,vertical paddles和paddle controller放到舞台的合适位置,分别在properties面板中命名为hor,ver和controller,如图16所示:

图16

  5.然后在图层layer3的第1帧加as:

  stop();
  /controller:lives = 5;
  /controller:score = 0;
  //初始化游戏得分和生命值分别为0和5

  6.最后将组件ball放到图层layer4中,在properties面板中给其命名为ball,并给图层layer4的第1帧加as:

  setproperty(&quot;/mousetrack&quot;, _visible, &quot;0&quot;);
  startdrag(&quot;mousetrack&quot;, true, 55, 55, 245, 330);
  setproperty(&quot;/quitspot&quot;, _visible, 0);
  //设置对象mousetrack在游戏中不可见,并且对mousetrack进行拖动,使对象//mousetrack紧跟鼠标运动。

  7.这样整个游戏就做完了,最后的主场景和时间线分别如图17和图18所示:

  
图17                    图18


原文件下载学习

  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons