虽然已经私聊向楼主解释了,不过我还是发出来科普一下吧。
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的自动图块绘制的原理。
那么编辑器是怎么知道要放这个差分的呀?
答案是检查图块的四周是否有相似的图块,来做出判定。
地面和墙壁的算法是不同的。地面只需要检查周围,但是墙壁要牵涉到整面墙。
|