学院首页>图形图像>FLASH>Flash MX 编程深层次应用-复杂游戏(1)

Flash MX 编程深层次应用-复杂游戏(1)

作者: 来源: 添加时间:2006-5-23 7:25:39
第5章 复杂游戏的常用技术及方法

5.1 游戏中的数组应用

 

在游戏中数组应用是很常见的,下面列出几个常见的应用:

Ö  批量数据存储
Ö  二维方阵的排列
Ö  同类数据的归类
Ö  海量数据的查找

数组在编程中的应用很多,虽然这里只列出4条应用,但它的应用范围已大大超出。Flash对数组的支持也非常强大,系统提供的函数与属性就有14个,清单如下:

Ö  new Array():创建数组。
Ö  Array.concat():数组合并,将两个以上的数组合并成一个数组。
Ö  Array.join():将数组的全部元素用一个字符连接成一个长的字符串。
Ö  Array.pop():取出数组中最上面的元素,同时数组长度减1,主要用于数组堆栈中。
Ö  Array.push():往数组中放入一个新元素,数组长度加1,主要用于数组堆栈中。
Ö  Array.reverse();:对数组内的全部元素进行反向。
Ö  Array.shift():取数组中的第一个元素,数组长度减1,主要用于数组队列中。
Ö  Array.slice():从数组中取一部分出来创建一个新的数组。
Ö  Array.sort();:为一个数组排序,主要用于字符串。
Ö  Array.sortOn();:按数组的某个域名进行排序,有点类似于数据库的操作。
Ö  Array.splice():从数组删除一个或者数个元素。
Ö  Array.toString():把数组转换成字符串。
Ö  Array.unshift();:把一批新元素放在数组的最前面,主要用于队列中。
Ö  Array.length:数组的元素个数。

数组有这么多函数,除了Array.sortOn();是MX版本新增加的外,其他在Flash 5中都已经存在了,这里不再做详细的介绍。有关内容可以参看其他的Flash 5的书籍。下面主要讲MX的一些新的特性。比如说三维数组的定义,这在Flash 5中实现起来非常麻烦,但现在变得非常简单。请看下面这段代码:

test=[[[1,2,3],[4,5,6],[7,8,9]],[[10,11,12],[13,14,15],[16,17,18]],[[19,20,21],[22,23,24],[25,26,27]]];

for (i=0; i<=2; i++) {

for (j=0; j<=2; j++) {

for (k=0; k<=2; k++) {

trace("test["+i+"]["+j+"]["+k+"]="+test[i][j][k]);

}

}

}

这里定义了一个三维数组,其实这种定义方法还可以在Flash 5中使用,但在Flash MX没有推出之前,极少有人知道可以这样写。以前写定义二维数组总是这样:test = new Array(new Array(),new Array(),new Array());真是麻烦,但是MX的这种写法真是方便之极。

上面程序代码显示结果如下:

test[0][0][0]=1

test[0][0][1]=2

test[0][0][2]=3

test[0][1][0]=4

test[0][1][1]=5

test[0][1][2]=6

test[0][2][0]=7

test[0][2][1]=8

test[0][2][2]=9

test[1][0][0]=10

test[1][0][1]=11

test[1][0][2]=12

test[1][1][0]=13

test[1][1][1]=14

test[1][1][2]=15

test[1][2][0]=16

test[1][2][1]=17

test[1][2][2]=18

test[2][0][0]=19

test[2][0][1]=20

test[2][0][2]=21

test[2][1][0]=22

test[2][1][1]=23

test[2][1][2]=24

test[2][2][0]=25

test[2][2][1]=26

test[2][2][2]=27

如果不知道数组的内容就可以这样写:

test = [[[],[],[]],[[],[],[]],[[],[],[]]];

for (i=0; i<=2; i++) {

for (j=0; j<=2; j++) {

for (k=0; k<=5; k++) {

test[i][j][k] = ++val;

trace("test["+i+"]["+j+"]["+k+"]="+test[i][j][k]);

}

}

}

可以看到最后一层k的值不等于3,也就是说最里面那一层的项数可以由程序自由控制。当然这种定义方法要求对数组的层次理解非常清晰。

细心的读者一定注意到了,在前面讲到的画方格特效中有一个这样定义的数组:table = new Array({x:200, y:200, a:256, c1:cc1, c2:cc2, c3:cc2×2, c4:cc1/4});其实这也是一种数组定义的方式,叫做结构数组,这种定义控制方便,内容清晰明了。

在数组的应用中排序与查找是经常用到的功能,下面冒泡排序程序代码就是一个最简单的排序算法:

function sortmy_array(my_array) {

for (var i = 0; i<=my_array.length-1; i++) {

for (var j = 0; j<=my_array.length-i-1; j++) {

if (my_array[j+1]>

//交换my_array[i+1]与my_array[i],保证小的在前面

  temp1 = my_array[i+1];

  my_array[j+1] = my_array[i];

  my_array[j] = temp1;

}

}

}

}

这段程序完成的是升序排序,也就是说小的数往前移,大的留在后面。数组在游戏中的应用面非常广,比如用来存储物体的位置、数量、坐标点等。总之,数组最适合存储一组组的有规律的数值、字符串等内容。

站内搜索