Flash游戏-开发基础
- 格式:docx
- 大小:628.18 KB
- 文档页数:67
FLASH 技巧一
—1— 目录
Flash游戏制作常用代码解析 ....................................... 2
FLASH游戏制作基础:响应键盘的四种方法 ............ 8
Flash游戏制作--空战 .................................................. 11
Flash飞行游戏制作全解 ............................................. 18
Flash游戏制作--迷宮 .................................................. 28
Flash游戏制作规划与流程漫谈 ................................. 35
用Flash制作互动的小人 ............................................. 44
常见的飞机发射子弹的控制 ........................................ 48
一个完全使用AS2编制的飞机游戏之制作详解 ....... 49
FLASH 技巧一
—2— 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):
其中浅色的正方形是一个被命名为mc的MovieClip,四个文本框属性均被设置为Dynamic Text(请参阅《Flash
MX 文本工具详解》),场景中的两个用于获得变量x_timeline和y_timeline(绝对坐标),正方形中的两个用于获得变量x_movieclip和y_movieclip(相对坐标),为了获得变量,需要在文本框的属性面板中的Var属性中分别填入相应的变量名,与上面例子形成循环的方式一样,在第一帧中写下面的AS,第二帧创建为内容帧:
x_timeline = _root._xmouse;
y_timeline = _root._ymouse;
x_movieclip = mc._xmouse;
y_movieclip = mc._ymouse;
注意:场景的坐标原点为其左上角,坐标值向右向下递增,为正值(这与我们通常意义的坐标并不相同);MC的坐标原点是编辑MC时的中心,坐标象限见图1. FLASH 技巧一
—3—
获得MC坐标的方法与上面说的大同小异,我们将在下面的MC属性简介中做介绍。
3.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
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键"); FLASH 技巧一
—4— }
}
这样在测试的环境下按下H键,output窗口就会显示出"按下了H键",其中72是H键的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 66 K 75 T 84 2 50
C 67 L 76 U 85 3 51
D 68 M 77 V 86 4 52 FLASH 技巧一
—5— E 69 N 78 W 87 5 53
F 70 O 79 X 88 6 54
G 71 P 80 Y 89 7 55
H 72 Q 81 Z 90 8 56
I 73 R 82 0 48 9 57
数字键盘上的键的键码值(keyCode) 功能键键码值(keyCode)
按键 键码 按键 键码 按键 键码 按键 键码
0 96 8 104 F1 112 F7 118
1 97 9 105 F2 113 F8 119
2 98 * 106 F3 114 F9 120
3 99 + 107 F4 115 F10 121
4 100 Enter 108 F5 116 F11 122
5 101 - 109 F6 117 F12 123
6 102 . 110
7 103 / 111
控制键键码值(keyCode)
按键 键码 按键 键码 按键 键码 按键 键码
BackSpace 8 Esc 27 Right Arrow 39 -_ 189
Tab 9 Spacebar 32 Down Arrow 40 .> 190
Clear 12 Page Up 33 Insert 45 /? 191
Enter 13 Page Down 34 Delete 46 `~ 192
Shift 16 End 35 Num Lock 144 [{ 219
Control 17 Home 36 ;: 186 \| 220
Alt 18 Left Arrow 37 =+ 187 ]} 221
Cape Lock 20 Up Arrow 38 ,< 188 '" 222
5.检测碰撞(hitTest)
目前我们见到的射击游戏或打老鼠之类的游戏很多都利用了hitTest,hitTest既可以检测MC与MC的碰撞,也可以检测鼠标与MC的碰撞:
hitTest的语法如下:
(1)myMovieClip.hitTest(x,y,shapeFlag)
这用来检测鼠标的碰撞,x和y分别代表鼠标的横纵坐标,shapeFlag用来规定检测以MovieClip的最大边界为限或以MovieClip的实际边界为限.
(2)myMovieClip.hitTest(target)
检测MC之间的碰撞,应用起来十分简单。
6.MC的复制与卸载
MC的复制,顾名思义就是产生出一个与目标相同的MC(除了name和depth以外),语法为:duplicateMovieClip(target,newname,depth)
target:被复制目标的名称;
newname:复制出的MC的名称;
depth:复制出的MC的深度.