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

Project1

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

[有事请教] 如何理解map的data与tilesets的flags

[复制链接]

Lv1.梦旅人

梦石
0
星屑
26
在线时间
701 小时
注册时间
2021-3-24
帖子
549
跳转到指定楼层
1
发表于 2021-10-15 18:11:41 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x


有人研究过吗

举个例子就行
全家活光光~

Lv4.逐梦者

梦石
0
星屑
7247
在线时间
474 小时
注册时间
2021-12-4
帖子
513
9
发表于 2022-12-30 14:20:46 | 只看该作者
设$dataMap(即某个MapXxx.json)的宽高分别为w = width和h = height格,则其data为一个长度为6wh的一维数组(向量),元素全部为[0,8192)的整数。
该向量共分为6段,每段长度为wh,前四段分别为四层图块ID,后两段为阴影和区域ID,阴影每格分为四小格所以有16种情况(在向量中可能为0~15,没试过),区域ID为0~255。
这样一来,点(x,y)的第z层的ID就是data[(z * h + y) * w + x],其中z为0~5。
图块ID的范围是[0,8192),其中[0,256)、[256,512)、[512,768)、[768,1024)分别为B~E组的图块,每组有16行16列,比如B组第一行左边8列就是0~7。但是我不确定右边8列是不是8~15,也有可能是128~135?(因为编辑器左侧的调色板是先左边8列再右边8列)
A5、A1、A2、A3、A4组的范围分别为[1536,2048)、[2048,2816)、[2816,4352)、[4352,5888)、[5888,8192),也就是说其实E组和A5组最多分别可以有48行和64行?(因为A5组只有8列)
A1~A4组因为是自动元件,所以实际上每48个ID对应同一个图块,比如A1左上角的图块ID范围其实是[2048,2096),该范围内不同的值表示不同的相邻情况带来的形状差异。
接着来说说Tilesets.json中的flags,它是一个长度为8192的向量,其元素全部为正整数,每个数包含了一个图块的【通行性、四方向通行性、是否梯子、是否灌木/流体、是否柜台、是否有害、地形标志】,以二进制方式存储。具体的存储规则是,将下面具有的属性所对应的数字直接相加,存储所得到的总和:
1、2、4、8表示【下、左、右、上】的通行性。
16表示通行性为五角星,显示在前景层。
32、64、128、256分别表示梯子、灌木、柜台、有害。
512、1024、2048分别表示【小舟、大船】的通行性以及【飞艇能否着陆】,但是编辑器里并不能修改这三项?
4096、8192、16384分别表示地形标志的【1、2、4】,相加即可得到0~7。
一般来说,涉及通行性(包括三种交通工具)的项会同时考虑该点的四层图块以及该点【以B~E组图块为行走图】的事件,而【梯子、灌木、柜台、有害、地形标志】则只考虑四层图块(从高层向低层)。

点评

虽然等了1年多 但看懂了  发表于 2023-1-4 09:59

评分

参与人数 2+2 收起 理由
清澈淌漾 + 1 塞糖
alexncf125 + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
8
发表于 2021-10-23 22:15:47 | 只看该作者
现在一想,其实是要做到两个点,第一,把要用到的data文件存档和读档(不需要全部,只是要用到的)(存档前和摆家具建筑后存一次进变量,读档后和摆家具建筑时读取),第二是获取当前地图的图块的长宽(用于后面数格子),然后用脚本数格子替代原有的值,最后,若是要复制事件还得把事件也复制过来

点评

突然忘了图块那个一块了,额这么一说,麻烦还是增加了好多  发表于 2021-10-23 23:22
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
26
在线时间
701 小时
注册时间
2021-3-24
帖子
549
7
 楼主| 发表于 2021-10-16 09:47:02 | 只看该作者
lisliz 发表于 2021-10-15 20:57
这个data里面的数字其实编码了这个格子的某个层级上显示的是ABCDE贴图的哪一个图块。
例如0~256代表B贴图
2 ...

看懂data了
这个数组长度是地图格子数的6倍
0-3是 4个层级
4是阴影
5是region

点评

还是不同图块的实现,把gamemap的fuction的那个对应文件加入某种条件因素,根据不同的条件,return不同的图块文件ID  发表于 2021-10-16 13:52
将这个[]赋值于某个地方,然后再数格子对应赋值[]中第某些数实现同图块文件的放置玩法(不同图块还是没法子)?  发表于 2021-10-16 13:48
全家活光光~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5060
在线时间
705 小时
注册时间
2018-12-11
帖子
241
6
发表于 2021-10-15 20:57:14 | 只看该作者
这个data里面的数字其实编码了这个格子的某个层级上显示的是ABCDE贴图的哪一个图块。
例如0~256代表B贴图
256~512代表C贴图
512~768代表D贴图
768~1536代表E贴图
1536~8192代表A贴图。

但RM的一个格子上有很多层,除了4层贴图,还有一层阴影和一层区域ID,所以data这里也写入了区域ID和阴影的数据。


flags则存储了数据库里图块的通行属性,柜台,有害地形地形标志这一列的东西,用二进制按位存储的。
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
5
发表于 2021-10-15 18:42:53 | 只看该作者
俺寻思:
四位数,前两位可能是画地图时左边图块图像的横纵坐标,后两位是具体样式(比如地图边边和地图中心,同一个图块,画出来的具体图块样式是不一样的)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
4
发表于 2021-10-15 18:39:28 | 只看该作者
开头四位数部分应该是图块的图像,那些0,大概跟通行有关,我觉得data(以我自己的庄园地图为例子)。

不,可能,data都是地图的图像(通行是引用图块文件的),所以都是图像,只是,比如我那个帖子的,那一堆四位数是代表对a层图像的引用,而后面那堆0的话,应该是因为我bcd层基本没有图像(没有,则为0)
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
11175
在线时间
2066 小时
注册时间
2013-6-10
帖子
1516
3
发表于 2021-10-15 18:24:03 | 只看该作者
俺是个土人,这一串又是洋文又是数字的俺看不懂
俺只关心俺的感冒啥时候能好
但俺还是帮顶吧
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
2
发表于 2021-10-15 18:22:31 | 只看该作者
datamap里面的data应该是图块各abcde层的排列顺序和能否通行(我其实挺想知道怎么刷新的,现在暂时只会原地传送刷新--指我之前发的帖子),
flag可能跟地形伤害有关,我猜

以上全是俺寻思

点评

话说,具体是什么代码可以即时刷新地图啊  发表于 2021-10-15 18:24
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 21:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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