积木首页 | 500多种网页特效 | 函数手册 | 广播电台 | 高清晰图片素材 | 服务器合租 | 万年历 | 网友最新浏览记录
程序开发 网页设计 搜索引擎 特效代码 操作系统 防范病毒 黑客技术 图形图象 电脑硬件 网络技术 服 务 器 数 据 库 网文精粹
您的位置:积木首页 >> 图形图象频道 >> FLASH >> 正文:
标题:Flash游戏制作常用代码解析
时间:2004-9-16 来源:不详 浏览数:

Flash 在网络中的地位如日中天,各种用Flash制作的广告、Flash MTV数不胜数,同时无论是自娱还是商业用途,Flash方便的界面制作和丰富的ActionScript控制为大家制作Flash 游戏提供了更多的空间。

  今天我们就和大家一起讨论一下Flash游戏制作中最常用的一些ActionScript,并配以精彩的小例子和源码下载,以方便大家制作中随时查阅。


  1、获得随机数
  随机函数在flash游戏制作中很常用,例如在拼图游戏中,每次开始新的游戏时可以利用随机函数使图块获得新的位置,试想一个千篇一律的游戏谁会有兴趣玩下去呢?

  2、获得鼠标及MC(MovieClip)的位置
  另外一个在flash游戏制作使用频率比较高的参数就是坐标了,鼠标的坐标和MC的坐标的获得方式是不同的。

  3、MC常用属性
  获取和控制MC(MovieClip)的各种属性如位置、色彩、大小、帧数等在flash游戏制作相当重要。


  4、判断按键
  既然是游戏,当然就要响应玩家的各种反应,除了鼠标,最直接的就是键盘了。

  5、检测碰撞
  目前我们见到的很多游戏如射击游戏或打老鼠之类的都会用到对象碰撞的检测,hitTest既可以检测MC与MC的碰撞,也可以检测鼠标与MC的碰撞。

  6、MC的复制与卸载
  MC(MovieClip)的复制与卸载无论在flash游戏还是其他的flash作品中都很常见。

  7、获取影片运行时间
  获取自影片开始播放时起已经过的毫秒数虽然很简单,但用利用率却很高,尤其是在一些需要计时的游戏中。

  8、颜色的设置
  颜色设置的重要性不言而喻。

  9、三角函数
  提到数学函数很多人是不是会感到"恐惧",但在游戏的制作中它可是必不可少的,这里我们利用Math的atan方法来制作一个永远指向鼠标的指针。


  以上我们向大家介绍了Flash游戏制作中最常用的一些ActionScript,掌握了这些基本控制方法,就可以制作出很多有意思的Flash游戏,同时在制作的过程中你还会发现更多的技巧,欢迎投稿和大家一起交流。

 

  1.获取随机数

  随机函数在flash游戏制作中很常用,例如在拼图游戏中,每次开始新的游戏时可以利用随机函数使图块获得新的位置,试想一个千篇一律的游戏谁会有兴趣玩下去。

  现在我们有两种产生随机数的方式:random()Math.random(),举例来讲,如果我们相随机赋给x一个0-5的数,我们可以使用x=random(6)或者x=Math.random()*5。

  但这两种方式产生的随机数是有区别的,用random(6)方法返回的x是0<=x<=5的整数,而另外一种返回的x则是0<=x<5的小数

  试着在第一帧中写入下面的AS,并在第二帧创建内容帧以形成循环:

x = random(6);
y = Math.random()*5;
trace("x="+x+",y="+y);

  在output窗口中将得到以下数据:

...
x=1,y=3.66887632058933
x=2,y=4.39878350123763
x=0,y=0.522367884404957
x=3,y=2.95675310306251
x=5,y=4.03038211166859
x=2,y=0.223042098805308
...

  区别一目了然。

  2.获得鼠标及MC(MovieClip)的位置

  另外一个在flash游戏制作使用频率比较高的参数就是坐标了,鼠标的坐标和MC的坐标的获得方式是不同的,鼠标的坐标可以用_xmouse和_ymouse获得,MC的坐标可以用MovieClip._x和MovieClip._y获得。值得注意的是在获得坐标时要考虑实际需要的坐标值是相对的还是绝对的,下面给出了一个典型的获得鼠标相对坐标和绝对坐标的例子(例1):


例1
源代码下载

  其中浅色的正方形是一个被命名为mc的MovieClip,四个文本框属性均被设置为Dynamic Text(请参阅《Flash MX 文本工具详解》),场景中的两个用于获得变量x_timeliney_timeline(绝对坐标),正方形中的两个用于获得变量x_movieclipy_movieclip(相对坐标),为了获得变量,需要在文本框的属性面板中的Var属性中分别填入相应的变量名,与上面例子形成循环的方式一样,在第一帧中写下面的AS,第二帧创建为内容帧:

x_timeline = _root._xmouse;
y_timeline = _root._ymouse;
x_movieclip = mc._xmouse;
y_movieclip = mc._ymouse;

  注意:场景的坐标原点为其左上角,坐标值向右向下递增,为正值(这与我们通常意义的坐标并不相同);MC的坐标原点是编辑MC时的中心,坐标象限见图1.

  获得MC坐标的方法与上面说的大同小异,我们将在下面的MC属性简介中做介绍。

  3.MC常用属性简介

  MC常用的属性大致如下:


属性 用法 说明 可获得 可设置 取值范围 _x
_y
MC._x
MC._y
返回/设置MC的横纵坐标值 Y Y 数值 _xscale
_yscale
MC._xscale
MC._yscale
返回设置MC的x/y轴缩放比例 Y Y 数值 _alpha MC._alpha 返回/设置MC的透明度 Y Y 0-100 _visible MC._visible 返回/设置MC的可见性 Y Y true;false

  _width
_height

MC._width
MC._height
返回/设置MC的宽/高值 Y Y 数值 _rotation MC._rotation 返回/设置MC的角度 Y Y 数值  _currentframe MC._currentframe 

返回MC的当前帧

Y N - _totalframes MC._totalframes 返回MC的总帧数 Y N - _framesloaded MC._framesloaded 返回已下载帧数 Y N - _name MC._name 返回/设置MC的名称 Y Y -

  具体使用方法参看例2


例2 源代码下载

  需要说明的是MC的_width_height属性是基于场景坐标系的(这就是为什么在旋转MC时其_width_height的值会发生变化的原因);而_xscale_yscale属性则是基于MC自己的坐标系的,拖拽例2中的_xscale_yscale控制柄,会看到MC以自身的坐标进行缩放变化。大家可以在实践中自己体会。


  4.判断按键

  既然是游戏,当然就要响应玩家的各种反应,除了鼠标,最直接的就是键盘了。响应键盘无非是判断玩家按下了哪一个键或者组合键,要实现这些其实很简单,我们既可以通过按钮或MC的事件来响应按键,也可以通过帧上的动作来响应,举例说明:

  (1)按钮的keyPress方法:

  先说按钮,按钮除了响应鼠标的一些动作(如:rollOver,release...)之外还有几个是响应固定按键的(如Enter,Left,Home,PageDown...),下面我们就来制作一个。建立一个按钮,拖到场景中,捆绑下面的AS:

on (keyPress "") {
  trace("按下了Left键");
}

  这样当我们在测试的环境下按下左方向键后,output窗口就会显示出"按下了Left键"。下面说说怎样使MC响应按键更复杂的按键。

  (2)MC响应单个按键:

onClipEvent (keyDown) {
  if (Key.isDown(72)) {
    trace("按下了H键");
  }
}

  这样在测试的环境下按下H键,output窗口就会显示出"按下了H键",其中72H键的keyCode值(其他按键的keyCode值将在附录中给出),如果不知道某个键的keyCode值也没关系,Flash为我们提供了getCode函数,将上面AS中的72替换成Key.getCode("H")会得到同样的效果。

源代码下载

  (3)MC响应组合键:

onClipEvent (keyDown) {
  if (Key.isDown(72) && Key.isDown(17)) {
    trace("您按下的组合键是Ctrl+H");
  }
}

  在测试的环境中按下Ctrl+H键,output窗口就会显示出"您按下的组合键是Ctrl+H"

  (4)利用帧上的动作响应按键:

  新建一个flash文件,利用上面讲过的:在第一帧写AS,第二帧创建内容帧的方法,使影片形成循环以便随时进行判断,然后在第一帧中写入下面的几组代码,分别进行试验;如果你使用的是MX,也可以不建立第二帧,而是用试验代码代替 _root.onEnterFrame=function(){...}中的"..."来达到同样的效果:

//①
trace(Key.getCode());

//②
if (Key.isDown(72)) {
  trace("按下了H键");
}

//③
if (Key.isDown(72) && Key.isDown(17)) {
  trace("按下了Ctrl+H组合键");
}

//④
if (Key.isDown(17)) {
  if (Key.isDown(72)) {
    temp = "+H";
  }
  if (Key.isDown(71)) {
    temp = "+G";
  }
  trace("按下了Ctrl"+temp+"键");
}

  注:对于MC的(2)(3)两种情况,可以将keyDown事件改为enterFrame事件,其中(2)还可以替换为keyUp事件.

  附:键码值表

字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码

  A

65 J 74 S 83 1 49 B

[1] [2] [3] 下一页


(责任编辑:admin)
关于本站 | 广告服务 | 联系我们 | 版权申明 | 强强联盟 | 投稿热线 | 网站地图 | 申请链接
Copyright ©2005-2006 Gimoo.net All rights reserved. 积木网 版权所有
E-mail:gimoohr@gmail.com 京ICP备05050695号