皮休酷玩店开张啦,更多优惠选择
Flash MX 编程深层次应用-复杂游戏(1)
作者:网友提供 文章来源:中国动漫新网 点击数: 更新时间:2008-6-23 14:07:34

复杂游戏的常用技术及方法

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;

                      }

             }

    }

}

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

【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
Google
友情链接
北京奥组委中央电视台凤凰卫视深圳广电集团山东电视台中国孔子网东阿阿胶深圳新闻网视觉中国中国插画联盟火星时代网
CGFinal中国视觉联盟中国动画联盟JOJO热情领域塞联阵GalaxyHeroCC漫画图库