阳光VIP

少壮不努力,老大徒伤悲。平日弗用功,自到临期悔。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

flash游戏设计笔记:区块地图制作(一)

Posted on 2012-02-16 20:31  阳光VIP  阅读(257)  评论(0编辑  收藏  举报

最近看了一个外国的网站,关于一些rpg地图的做法,其中使用到的一个区块地图做法。这些思想是源于最早开发游戏时候采用到一些方案。使用一些数组来表示图片单元,这样做是为了使地图能够重用,从而达到了减少内存占用。

 

 我们可以640x480把一张地图切割成一小块32x32 的方块,

  1. private var myMap:Array=
  2.         [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
  3.         [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
  4.         [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
  5.         [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
  6.         [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
  7.         [1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1],
  8.         [1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1],
  9.         [1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1],
  10.         [1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1],
  11.         [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
  12.         [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
  13.         [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
  14.         [1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],
  15.         [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
  16.         [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]];

观察到里面的数组,有一些是1,有一些是0,这些方块每一个数字都可以代表一个小方块。为了能够让我们贴图。我们就要做一些小小的动作。为我们的图片贴上一索引号。假设草地是1,0是砖。那么我们使用一个二维数组来复制这些小小方块来作为我们地图贴片。

  1. public function init(map:Array):void
  2.         {
  3.             var mapWidth:int=map[0].length;
  4.             var mapheight:int=map.length;
  5.             for (var i:int = 0; i < mapheight; ++i)
  6.             {
  7.                 for (var j:int = 0; j < mapWidth; ++j)
  8.                 {
  9.                     var fa:Fang=new Fang();
  10.                     addChild(fa);
  11.                     fa.x=j*Fwidth;
  12.                     fa.y=i*Fheight;
  13.                     fa.gotoAndStop(map[i][j]+1);//1就填写一种颜色,0就填写第二种颜色
  14.                 }
  15.             }

我们这里采用了一个二维数组形式来复制我们所需要的地图。可以看到不同的颜色,正好代表了不同的图形模块。所以这种制作地图是一个很不错的思路。它的思想来源于以前制作游戏技术,同样适用于当今一些游戏。

 

 

 

 

 

这里采用了var mapWidth:int=map[0].length;//获取了数组的宽度
   var mapheight:int=map.length;//获取了数组的高度

 

然后使用两个循环语句来复制我们所需要的图元模块。

for()

for()

{

 

}

 

同样不要忘记了在库链接的添加上Fang

 

这里只是提供一种关于用数组的形式来构建一些可以重复使用地图的模块的单元 思想。对一些游戏的地图制作技术不只是这样的。希望有兴趣的朋友可以多想想其他方案

 

 

下面是效果图:当中是截取了不同的图片,当然数组也要发生一些改变。 其中一些树,比较高一些,我们分两层进行贴,底层铺草地,上一层就铺一些树,同样的做法,效果却有一些改变。是不是觉得好爽呢?如果是的那么就开始动手做自己的flash rpg小游戏吧。至于还有一些小人物,要自己加上去了。这里暂时不多说。