设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3799|回复: 20
打印 上一主题 下一主题

[胡扯] 哪位大神手里有地图的数据详解?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1044
在线时间
251 小时
注册时间
2016-9-2
帖子
126
跳转到指定楼层
1
发表于 2018-1-31 16:25:12 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 雪在燃 于 2018-1-31 16:29 编辑

首先,基于某种蜜汁自信,我决定要写一个mv的随机地图生成脚本
然后,就卡在了地图数据上
地图数据相当鬼畜,是一个地图的长*宽*6长度的数组,而且不同自动元件有着不同的处理,简直让人头疼
不知道编辑器对这些进行了怎样的处理,于是就只能进游戏里捣鼓,然后慢慢的摸索编辑器是如何根据元件生成的数据结构

我还以为就是个简单友好的长*宽的数组

真是令人摸不着头脑
想要吐槽点什么发在水区,结果好像是求问贴了,因为脑袋已经变成了浆糊

Lv4.逐梦者 (版主)

梦石
0
星屑
6901
在线时间
7028 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

12
发表于 2018-2-2 17:44:21 | 只看该作者
虽然已经私聊向楼主解释了,不过我还是发出来科普一下吧。

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里的定义:

  1. Tilemap.TILE_ID_B      = 0;
  2. Tilemap.TILE_ID_C      = 256;
  3. Tilemap.TILE_ID_D      = 512;
  4. Tilemap.TILE_ID_E      = 768;
  5. Tilemap.TILE_ID_A5     = 1536;
  6. Tilemap.TILE_ID_A1     = 2048;
  7. Tilemap.TILE_ID_A2     = 2816;
  8. Tilemap.TILE_ID_A3     = 4352;
  9. Tilemap.TILE_ID_A4     = 5888;
  10. 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里的定义:

  1. Tilemap.FLOOR_AUTOTILE_TABLE = [
  2.     [[2,4],[1,4],[2,3],[1,3]],[[2,0],[1,4],[2,3],[1,3]],
  3.     [[2,4],[3,0],[2,3],[1,3]],[[2,0],[3,0],[2,3],[1,3]],
  4.     [[2,4],[1,4],[2,3],[3,1]],[[2,0],[1,4],[2,3],[3,1]],
  5.     [[2,4],[3,0],[2,3],[3,1]],[[2,0],[3,0],[2,3],[3,1]],
  6.     [[2,4],[1,4],[2,1],[1,3]],[[2,0],[1,4],[2,1],[1,3]],
  7.     [[2,4],[3,0],[2,1],[1,3]],[[2,0],[3,0],[2,1],[1,3]],
  8.     [[2,4],[1,4],[2,1],[3,1]],[[2,0],[1,4],[2,1],[3,1]],
  9.     [[2,4],[3,0],[2,1],[3,1]],[[2,0],[3,0],[2,1],[3,1]],
  10.     [[0,4],[1,4],[0,3],[1,3]],[[0,4],[3,0],[0,3],[1,3]],
  11.     [[0,4],[1,4],[0,3],[3,1]],[[0,4],[3,0],[0,3],[3,1]],
  12.     [[2,2],[1,2],[2,3],[1,3]],[[2,2],[1,2],[2,3],[3,1]],
  13.     [[2,2],[1,2],[2,1],[1,3]],[[2,2],[1,2],[2,1],[3,1]],
  14.     [[2,4],[3,4],[2,3],[3,3]],[[2,4],[3,4],[2,1],[3,3]],
  15.     [[2,0],[3,4],[2,3],[3,3]],[[2,0],[3,4],[2,1],[3,3]],
  16.     [[2,4],[1,4],[2,5],[1,5]],[[2,0],[1,4],[2,5],[1,5]],
  17.     [[2,4],[3,0],[2,5],[1,5]],[[2,0],[3,0],[2,5],[1,5]],
  18.     [[0,4],[3,4],[0,3],[3,3]],[[2,2],[1,2],[2,5],[1,5]],
  19.     [[0,2],[1,2],[0,3],[1,3]],[[0,2],[1,2],[0,3],[3,1]],
  20.     [[2,2],[3,2],[2,3],[3,3]],[[2,2],[3,2],[2,1],[3,3]],
  21.     [[2,4],[3,4],[2,5],[3,5]],[[2,0],[3,4],[2,5],[3,5]],
  22.     [[0,4],[1,4],[0,5],[1,5]],[[0,4],[3,0],[0,5],[1,5]],
  23.     [[0,2],[3,2],[0,3],[3,3]],[[0,2],[1,2],[0,5],[1,5]],
  24.     [[0,4],[3,4],[0,5],[3,5]],[[2,2],[3,2],[2,5],[3,5]],
  25.     [[0,2],[3,2],[0,5],[3,5]],[[0,0],[1,0],[0,1],[1,1]]
  26. ];
复制代码

我去!这么多数字!这个复合数组表里面存着的是地面图块差分的绘制方法。一共有48种,对应48个差分ID。
地面指素材图内原图有2x3格的图块种类。除此之外还有2x2的墙壁(WALL,16个差分)还有2x1(WATERFALL,4个差分)的瀑布类型。

这是A1的第一个图块的素材图(的其中一帧):


自动图块是怎么绘制的呢?首先,这个2x3的素材图需要拆成4x6的半格。


然后,系统会按照表格里指定的区块进行整合。
第39个差分的表格是[[2,4],[3,4],[2,5],[3,5]]


这就是VA/MV的自动图块绘制的原理。




那么编辑器是怎么知道要放这个差分的呀?
答案是检查图块的四周是否有相似的图块,来做出判定。
地面和墙壁的算法是不同的。地面只需要检查周围,但是墙壁要牵涉到整面墙。

评分

参与人数 3+3 收起 理由
fux2 + 1 不如单开一贴或附加到教程贴
雪在燃 + 1 非常强大
御曹司 + 1

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23186
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

11
发表于 2018-2-1 19:06:20 | 只看该作者
长X宽X6的数组含义如下:
[p, a, c, k, e, d]
p:第一层的图块ID
a:第二层的图块ID
c:第三层的图块ID
k:第四层的图块ID(此处是2086,应该是A1的第1个图块)
e:图块的通行标记,具体为:
  1 下通行不可
  2 左通行不可
  4 右通行不可
  8 左通行不可
  16 优先级
  32 柜台标记
  64 伤害地形
  128 梯子标记
  256-2048 地形标志
  (这条具体记不太清了)
d:区域ID(0-255)

点评

e(第五层)不是通行标记,而是影笔的数据。  发表于 2018-2-2 16:23
256,512,1024,2048应该是什么特定的东西?  发表于 2018-2-1 19:22
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1044
在线时间
251 小时
注册时间
2016-9-2
帖子
126
10
 楼主| 发表于 2018-2-1 19:04:39 | 只看该作者
fux2 发表于 2018-2-1 15:12
很久以前研究过,现在忘的差不多了,不过每层的tileid似乎是包含了通行和地形标记之类的信息,
你可以参考 ...

是用地图数据来生成地图数据,脚本读取的是已经生成好的,所以不能反推出数据是如何表示的呢

点评

mv的地图数据里的这些是自动元件的不同状态,所以很苦恼  发表于 2018-2-1 19:05
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1044
在线时间
251 小时
注册时间
2016-9-2
帖子
126
9
 楼主| 发表于 2018-2-1 19:02:59 | 只看该作者
芯☆淡茹水 发表于 2018-2-1 13:08
类似于 一键生成迷宫 的功能么?!
说实话,软件的地图图块素材可自由添加和变动,不同的地图图片各种景物 ...

游戏运行时的随机地图,用来提供游戏性的

点评

就比如最简单的,水里面不能再生成 树 的图块,平地上不能再生成 桥 的图块,,,这些都需要大量的标识来辨别。  发表于 2018-2-1 19:26
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42329
在线时间
7598 小时
注册时间
2009-7-6
帖子
13505

开拓者贵宾

8
发表于 2018-2-1 15:12:57 | 只看该作者
很久以前研究过,现在忘的差不多了,不过每层的tileid似乎是包含了通行和地形标记之类的信息,
你可以参考一下Game_Map的autotileType函数,还有terrainTag函数,具体的忘光了(x

追加:
去翻了一下代码,
你把data里每个数字转成二进制显示大概就能看懂了。
2086包含的信息有但可能不仅有以下内容:
地形标记:2086>>12 = 1 (二进制首位)
图块种类:2086>= 2048 ? Math.floor((2086- 2048) / 48) : -1 = 0
通行:最后4位二进制数,代表4个方向的通行

点评

总之肯定和2的指数有一腿就对了吧(滑稽)  发表于 2018-2-1 19:19

评分

参与人数 1+1 收起 理由
赤炎 + 1 5楼

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33430
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

7
发表于 2018-2-1 13:08:23 | 只看该作者
本帖最后由 芯☆淡茹水 于 2018-2-1 13:14 编辑

类似于 一键生成迷宫 的功能么?!
说实话,软件的地图图块素材可自由添加和变动,不同的地图图片各种景物的图块组成和搭配都不一样。
想象中就算做出可以自动生成地图的程序,所需要标注的东西也非常之多,对于地图需求量不是那么大的,还不如手动画地图。

以前也貌似看见过类似的:https://rpg.blue/thread-403319-1-1.html
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1044
在线时间
251 小时
注册时间
2016-9-2
帖子
126
6
 楼主| 发表于 2018-1-31 17:57:53 | 只看该作者
RaidenInfinity 发表于 2018-1-31 17:55
我觉得2楼和4楼不懂就别瞎比比了。这灌的一桶热翔水又烫又恶心。

楼主是真的懂程序真的有心要研究的话,我 ...

发在水区就是希望能够吐槽的,这种事情发在提问区反而是一堆人看不懂而白白沉下去啦~
慢慢的研究也是有趣的一环~

评分

参与人数 1+1 收起 理由
赤炎 + 1

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
6901
在线时间
7028 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

5
发表于 2018-1-31 17:55:10 | 只看该作者
我觉得2楼和4楼不懂就别瞎比比了。这灌的一桶热翔水又烫又恶心。

楼主是真的懂程序真的有心要研究的话,我可以帮个忙。我算是研究了整半年的地图数据然后才成功制作了一个地图编辑器。
私信留QQ,一对一说比较好。不然啊,呵呵,你来水区发帖就得准备好被灌无营养的废水呗。



点评

热翔过分了吧……人家又没恶意  发表于 2018-2-1 21:20

评分

参与人数 1+1 收起 理由
赤炎 + 1 好棒棒 在“我”眼里不懂的人不能说话.

查看全部评分

回复 支持 0 反对 1

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

4
发表于 2018-1-31 17:38:20 | 只看该作者
雪在燃 发表于 2018-1-31 17:20
大神我根本看不懂你说的啥~
不过你可能理解错了,我是指画的地图,也就是map.json那个文件里, ...

2086/2/2/2/2/2/2/2/2/2/2/2=1.018555
你确定是2086而不是2056吗···
如果想要弄清楚,感觉一步步修改地图可能能明白?mv的地图最小好像是可以改成1x1的,那就先从1x1开始,慢慢改1x2、2x2、2x3、3x3···然后对比数据的不同

点评

是的,为什么就mv特殊一点,256的极限地图,然后可以设置超小地图2333 过于小的地图不设置随机  发表于 2018-2-2 22:39
可以设小于屏幕范围的地图,不过那样的话周围会变黑框  发表于 2018-2-2 22:37
,现在还要考虑特异情况,不过小地图用来作测试也是极好的!  发表于 2018-2-2 22:14

评分

参与人数 1+1 收起 理由
雪在燃 + 1 苦了我也,我原本以为地图最小是17*13的.

查看全部评分

[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-14 11:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表