虽然已经私聊向楼主解释了,不过我还是发出来科普一下吧。 
 
VA和MV的地图数据基本上是一样的,只是MV多了一个上层。 
获取数组里某个数值的指标的公式是: (z * 高度 + y) * 宽度 + x 
 
MV地图的层数如下(z坐标): 
0 - 下层1(A1~5图块) 
1 - 下层2(A1或A2图块的草丛等装饰) 
2 - 上层1(B~E图块) 
3 - 上层2(同上,VA缺了这层) 
4 - 影笔 
5 - 区域ID 
 
  
 
那么各层内的数值代表什么呢?第1~4(Z坐标0~3)层都是一样的。 
我们来看MV的rpg_core.js里的定义: 
 
- Tilemap.TILE_ID_B      = 0;
 
 - Tilemap.TILE_ID_C      = 256;
 
 - Tilemap.TILE_ID_D      = 512;
 
 - Tilemap.TILE_ID_E      = 768;
 
 - Tilemap.TILE_ID_A5     = 1536;
 
 - Tilemap.TILE_ID_A1     = 2048;
 
 - Tilemap.TILE_ID_A2     = 2816;
 
 - Tilemap.TILE_ID_A3     = 4352;
 
 - Tilemap.TILE_ID_A4     = 5888;
 
 - Tilemap.TILE_ID_MAX    = 8192;
 
 
  复制代码 
 
从上面的定义里我们可以看到: 
B图块是0~255,C图块是256~511,D图块是512~767,E图块是768~1023,A5图块是1536~1663。 
这些图块都是非自动的图块,是直接绘制上地图的。理解上应该没什么问题。 
 
A1是2048~2815。其中一共多少个ID呢?答案是768个(包括2048)。 
那下一个问题是,A1有多少种图块?水面啊浮萍啊瀑布啊什么的。2排,一排8格,所以一共16种。 
768 / 16 = 48。这儿我们可以知道的是,一种图块最多可以占48种差分。 
这个公式对A2,A3,A4也适用。 
 
于是3楼提到的2086是啥?我们来算算。 
2086位于2048和2815之间,所以是A1类型的图块ID。 
2086 - 2048 = 38。是A1类型的第39个图块ID。(注:要从0开始算) 
38 / 48 = 0 然后 38 % 48 = 38  
所以,我们可以知道的是,2086是A1类型的第一种图块的第39个差分。 
 
如下图所示:(这2年前为了研究地图数据弄的东西…) 
 
 
噢,原来是这个图块差分啊。真的假的?嘛,那我们进游戏实测一下。我目前没有MV,所以用VA来顶替一下。 
各位知道怎么获取一个坐标的图块ID吗?要用脚本?不。事件就够了。 
 
 
 
获取坐标0,0第一层的图块ID,放进1号公共变量里。 
 
成果是? 
 
 
 
好,那就对了哟。 
 
  
 
现在我们知道了,图块ID 2086 是第一种A1图块的第39个差分。那为什么会画出这个形状出来的呢? 
我们来看MV里的定义: 
 
- Tilemap.FLOOR_AUTOTILE_TABLE = [
 
 -     [[2,4],[1,4],[2,3],[1,3]],[[2,0],[1,4],[2,3],[1,3]],
 
 -     [[2,4],[3,0],[2,3],[1,3]],[[2,0],[3,0],[2,3],[1,3]],
 
 -     [[2,4],[1,4],[2,3],[3,1]],[[2,0],[1,4],[2,3],[3,1]],
 
 -     [[2,4],[3,0],[2,3],[3,1]],[[2,0],[3,0],[2,3],[3,1]],
 
 -     [[2,4],[1,4],[2,1],[1,3]],[[2,0],[1,4],[2,1],[1,3]],
 
 -     [[2,4],[3,0],[2,1],[1,3]],[[2,0],[3,0],[2,1],[1,3]],
 
 -     [[2,4],[1,4],[2,1],[3,1]],[[2,0],[1,4],[2,1],[3,1]],
 
 -     [[2,4],[3,0],[2,1],[3,1]],[[2,0],[3,0],[2,1],[3,1]],
 
 -     [[0,4],[1,4],[0,3],[1,3]],[[0,4],[3,0],[0,3],[1,3]],
 
 -     [[0,4],[1,4],[0,3],[3,1]],[[0,4],[3,0],[0,3],[3,1]],
 
 -     [[2,2],[1,2],[2,3],[1,3]],[[2,2],[1,2],[2,3],[3,1]],
 
 -     [[2,2],[1,2],[2,1],[1,3]],[[2,2],[1,2],[2,1],[3,1]],
 
 -     [[2,4],[3,4],[2,3],[3,3]],[[2,4],[3,4],[2,1],[3,3]],
 
 -     [[2,0],[3,4],[2,3],[3,3]],[[2,0],[3,4],[2,1],[3,3]],
 
 -     [[2,4],[1,4],[2,5],[1,5]],[[2,0],[1,4],[2,5],[1,5]],
 
 -     [[2,4],[3,0],[2,5],[1,5]],[[2,0],[3,0],[2,5],[1,5]],
 
 -     [[0,4],[3,4],[0,3],[3,3]],[[2,2],[1,2],[2,5],[1,5]],
 
 -     [[0,2],[1,2],[0,3],[1,3]],[[0,2],[1,2],[0,3],[3,1]],
 
 -     [[2,2],[3,2],[2,3],[3,3]],[[2,2],[3,2],[2,1],[3,3]],
 
 -     [[2,4],[3,4],[2,5],[3,5]],[[2,0],[3,4],[2,5],[3,5]],
 
 -     [[0,4],[1,4],[0,5],[1,5]],[[0,4],[3,0],[0,5],[1,5]],
 
 -     [[0,2],[3,2],[0,3],[3,3]],[[0,2],[1,2],[0,5],[1,5]],
 
 -     [[0,4],[3,4],[0,5],[3,5]],[[2,2],[3,2],[2,5],[3,5]],
 
 -     [[0,2],[3,2],[0,5],[3,5]],[[0,0],[1,0],[0,1],[1,1]]
 
 - ];
 
 
  复制代码 
我去!这么多数字!这个复合数组表里面存着的是地面图块差分的绘制方法。一共有48种,对应48个差分ID。 
地面指素材图内原图有2x3格的图块种类。除此之外还有2x2的墙壁(WALL,16个差分)还有2x1(WATERFALL,4个差分)的瀑布类型。 
 
这是A1的第一个图块的素材图(的其中一帧): 
 
 
 
自动图块是怎么绘制的呢?首先,这个2x3的素材图需要拆成4x6的半格。 
 
 
 
然后,系统会按照表格里指定的区块进行整合。 
第39个差分的表格是[[2,4],[3,4],[2,5],[3,5]] 
 
 
 
 这就是VA/MV的自动图块绘制的原理。 
 
  
 
那么编辑器是怎么知道要放这个差分的呀? 
答案是检查图块的四周是否有相似的图块,来做出判定。 
地面和墙壁的算法是不同的。地面只需要检查周围,但是墙壁要牵涉到整面墙。 
 |