Flash 游戏制作教程 < 一>
作者:jack 日期:2006-03-23
Tile Based Games 1.1
by TONYPY 翻译: jackgun_at_126.com
地图的格局(map format)
我们将使用在 Flash 中最好的方法来表达一个游戏的地图:数组( Arrays ). 如果你不知道什么是数组( Arrays )那就打开 Flash 的帮助文档先查一下吧。
二维数组
我们用二维数组来表示游戏地图。不,它不是什么二维空间,它只是一个数组,而这个数级的每个元素又是一个个独立的数组。不明白?看……
一般来说,我们这样给一个普通的一维数组赋值:
myArray=["a", "b", "c", "d"];
很容易吧。 你可以这样取得数组变量里的第一个元素的值: myArray[0], 当然,这个值为 "a", 顺序下来第二个元素就是 myArray[1] 了,它的值等于 "b", ……
现在,我们来看二维数组。你会想,在上面的数组中的元素如果不是 "a", "b" 和 "c" 什么的, 我要把另一些数级放到里面去可以吗?答案是肯定的,我们来看:
a=["a1", "a2", "a3"];
b=["b1", "b2", "b3"];
c=["c1", "c2", "c3"];
myArray=[a, b, c];
这样对 myArray 的数组声明,仍然和上面的数组一样.但是它的第一个元素 myArray[0] 的值也是一个数组 ["a1", "a2", "a3"], 第二个元素的值是 ["b1", "b2", "b3"]. 像这样:
myVar=myArray[2];
这样就把 myArray 的第三个值 ["c1", "c2", "c3"]. 赋给了 myVar 变量。
好了,这就是二维数组。你要问取值的方法吗?这样写:
myVar=myArray[2][0];
意思就是 myArray 数组中第三个元素里的第一个元素的值,myVar它等于 "c1".
同样 myVar=myArray[0][1] 是将指 myArray (0) 的值 “a” 里的第二个元素的值 ”a 而 myArray[1][0] 它的值等于 "b1" 。
现在,明白二维数组的定义了吗?
Tile Based Games 1.2
by TONYPY 翻译: jackgun_at_126.com
制作游戏地图
首先我们将一个地图分成等分的方格,然后用二维数组的方式来表达砖块或砖墙的位置:
myMap = [
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1]
];
你可以看到,这个地图由 6 行和 8 列组成,如果我们让主角从左上角出显,那它最多可以往右走 8 步,往下走 6 步。再往外就出了地图范围了。
但聪明的你一定提出这样的问题了:“那我们做这个数字地图还有意义吗?” 当然不是! 我们要用到一些 OOP (就是面向对象,”我的妈呀,我撇!”…… 远处传来恐怖的惨叫声……) 来建立和管理我们的游戏 (先看看 flash 帮助里关于 OOP 的部份吧). 我们先声明单独的砖的值,让它成为游戏里其它砖的模板。然后我们彻底循环地图数组并取出每一个位置的值。
如例子,我们取值 1 为砖,创建一个砖名为 Tile1 的对象模板。在游戏里其它的砖都和它一样有共同的属性。通常这种情况这些砖只有两个属性,一是 “walkable” (可行走),一是 “frame” (帧)。
Walkable 砖的属性之一,用来告诉我们那块砖是可以行走的, (我们设 walkable=true) 或不能行走的 (walkable=false). 这样我们就可以避免在游戏里使用 hitTest 这种又慢又不 cool 的垃圾 function 了。
Frame 砖的属性之一,它告诉我们在某个位置放什么子的砖(不同的 Movie clip) 和什么时候放置砖块。 这样我们就可以不断复制相用的砖的 mc 形成我们要的地图,所有的砖默认都是名为 “frame
下面,我们声明一块砖的对象:
Tile1= function () {};
Tile1.prototype.walkable=false;
Tile1.prototype.frame=2;
现在,我们以后在地图里数组值为 1 时都用这个砖对象。同时,这块砖 (Tile1) 被声明了它是不可以被穿过的 (walkable=false) ,并且在显示的时候用 frame 2 的砖块 mc 。
上一篇
下一篇

文章来自:
Tags: