在游戏中数组应用是很常见的,下面列出几个常见的应用:
数组在编程中的应用很多,虽然这里只列出4条应用,但它的应用范围已大大超出。Flash对数组的支持也非常强大,系统提供的函数与属性就有14个,清单如下:
数组有这么多函数,除了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;
}
}
}
}
这段程序完成的是升序排序,也就是说小的数往前移,大的留在后面。数组在游戏中的应用面非常广,比如用来存储物体的位置、数量、坐标点等。总之,数组最适合存储一组组的有规律的数值、字符串等内容。