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

Project1

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

[原创发布] 【Blackroom+Indepth】最强大的地图区域编辑插件MapArea

  [复制链接]

Lv3.寻梦者

梦石
0
星屑
1007
在线时间
145 小时
注册时间
2013-10-16
帖子
271
跳转到指定楼层
1
发表于 2017-2-8 09:36:59 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 rpg-sheep 于 2017-2-8 09:44 编辑

MV在地图通行方面有Blackroom(隐藏房间)和Indepth(玩家遮罩)两个插件,前者实现了玩家不在房间房间变黑的效果,后者实现了让玩家能在某些墙下面走的功能。
但是优酱经过研究发现,这两个插件都存在致命的漏洞:
Blackroom的坐标需要在地图注释当中手动指定,其不便程度苦了很多地图作者,并且只能长方形遮罩,没法用奇怪的形状。
Indepth有很多BUG,并且他的算法并不是最优。
综上所述,优酱结合两个插件的优点,推翻了它们的算法,重新写出来MapArea,不仅提高了运算效率,还增加了新的功能!并且所有功能都用地图区域描绘。换句话说,不用在去地图注释忙活了。

首先来看一眼插件的设置项:

start和max之间的区域(包括start和max)会被描绘成黑色,每一个区域作为单独的一部分,你可以随意填涂,可以不连续地涂都没有问题。
passList:指定区域角色可以通过,并且会被当前地图的图块遮罩住,可以用来做穿墙。请注意这个数据是可以用英文逗号分隔(注意是英文逗号!!!!!),以达到多种区域遮罩的目的。
blockList:指定区域角色不可以通过。请注意这个数据是可以用英文逗号分隔(注意是英文逗号!!!!!)。
brushList:指定区域角色可以通过,但会变成半透明,类似默砂之歌的效果。请注意这个数据是可以用英文逗号分隔(注意是英文逗号!!!!!)。
soulList:这个插件最强大的地方就在于此,我管它叫“灵魂绑定列表”。它的作用是将多个区域绑定为一个。每组用英文分号分隔,每组中的区域之间用英文逗号。(再强调一遍英文!!!!!)

你应该已经对本插件有了一定了解,但肯定有很多不懂的地方,下面我们进入实战演练,教你用MapArea做一个隐藏房间。
这里有一个房间地图,我希望达成以下功能:
1、玩家在1号房间时能看到4号房间,4号房间能看到1号房间。2和3是独立的两个房间。
1、玩家在5和6走廊时半透明,7和8走廊时穿墙。

那么首先我们来完成第1项目标:

首先,将四个房间涂满四种区域,然后把插件设置中的start填成10,max填成15。
soullist填成10,13(将10号和13号绑定在一起)
运行试试?你会发现你已经完成了第一步,是不是超级简单?
然后我们需要完成第二项目标:

如图,将走廊分别涂成16和18。然后将插件设置中passList写成16,brushList写成18,再运行一下试试?
你可能会发现玩家在16号附近通行不想你一开始想的那样,能走出你设定的范围。这是因为MV默认同种类型的墙可以通行,为了避免这个BUG,你需要设置blocklist为17,然后用17围一圈。

这样玩家就不会乱走了,如果没有出现乱走,17可以不画。基本功能到这里就结束了。
但同时我们发现一个蛋疼的问题:

如图,红色圈圈的区域有问题,这两个区域在房间范围内,应该被涂黑,但是它们又是属于穿墙的情况。被涂黑了就不能穿墙,能穿墙就涂不黑?怎么办?
哈哈!soullist灵魂绑定的强大功能正是体现在此。用它可以做出极为复杂的地图判定,在此优酱仅展示最简单的方案:

把这两个区域分别涂成14和15。(请保证14,15在你的start-max划分范围内)
然后将插件设置中passList写成14,15,16。
然后把14和12绑定在一起,15和13绑定在一起。这样soullist就变成了:12,14;10,13,15
再试试?完美解决!

PS.可能到这里玩家要问了:为什么不给每个地图做自己的设置?这样统一设置很麻烦的。
的确很麻烦,但是这样不会乱。比如你的游戏有20个地图,当你回过头来修改地图的时候,如果每个地图有自己的设置,你会发现你根本不知道哪块是哪块了。后续优酱可能会添加地图注释指定当前地图的passlist这个功能。
目前的建议是:提前准备,比如做这样的设置:
start:10
max:29
passlist:10,11,12,13,14,30
blocklist:15,16,17,18,19,31
brushlist:20,21,22,23,24,32
soullist:10,15,20,25;11,16,21,26;12,17,22,27;13,18,23,28;14,19,24,29;
提前做好设置,然后按照这个去涂对应区域,你会发现得心应手。

PS.2优酱,只能用黑块遮挡么?
后续功能开发中~优酱的思考有用底层图块做遮挡,这个功能已经开发出来了,但是受内存优化限制还没有推出更新,优酱不会发布任何一个消耗多余内存的脚本。

插件下载:

评分

参与人数 15星屑 +190 +12 收起 理由
用户0217 + 1 精品文章
黛烟夫人 + 1 精品文章
loffid + 1 精品文章
loveinyou200 + 1 精品文章
turboyuan + 1 精品文章
A.Grothendieck + 1 精品文章
cheese401 + 1 塞糖
ntrworld + 1 精品文章因为雷玉才知道这里
whitedewxiao + 1 精品文章
zxcasdqwe719 + 1 精品文章

查看全部评分

开心咸鱼每一天~

Lv1.梦旅人

梦石
0
星屑
236
在线时间
17 小时
注册时间
2023-12-20
帖子
24
58
发表于 2024-2-12 15:14:15 | 只看该作者
赞美大佬!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
640
在线时间
69 小时
注册时间
2023-9-30
帖子
22
57
发表于 2024-2-12 13:18:42 | 只看该作者
反馈一个不是问题的问题,以防止之后有人问,
地图高度要在21以上,多个数字设置的地图黑块才会有效,21以内只会生效一个数字的黑块。
我也不知道具体为什么。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
236
在线时间
17 小时
注册时间
2023-12-20
帖子
24
56
发表于 2023-12-31 08:03:24 | 只看该作者
赞美大佬!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
236
在线时间
17 小时
注册时间
2023-12-20
帖子
24
55
发表于 2023-12-31 08:02:20 | 只看该作者
赞美大佬!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
506
在线时间
61 小时
注册时间
2022-4-4
帖子
13
54
发表于 2023-12-31 06:10:57 | 只看该作者
前来学习隐藏房间
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
93
在线时间
23 小时
注册时间
2023-4-29
帖子
15
53
发表于 2023-12-28 22:07:24 | 只看该作者
请问大佬们,这个插件怎么做到黑块遮罩渐变时间减少呀?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
53
在线时间
24 小时
注册时间
2023-6-1
帖子
29
52
发表于 2023-8-11 21:30:50 | 只看该作者
超级厉害,感谢分享!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
10 小时
注册时间
2023-5-24
帖子
5
51
发表于 2023-6-9 15:49:22 | 只看该作者
本帖最后由 重新起航 于 2023-6-9 15:50 编辑

不知道还有没有人使用这个插件,修改了一下,可以用于MZ
  1. 将// * ShaderTilemap与// * Game_Map之间的代码注释掉,换成下面的就可以用于Mz了,应该,,,没有bug吧。初步测试可以使用了,
  2. // * ShaderTilemap
  3. // ======================================================================
  4. Tilemap.prototype._addSpot = function(startX, startY, x, y) {
  5.     const mx = startX + x;
  6.     const my = startY + y;
  7.     const dx = x * this._tileWidth;
  8.     const dy = y * this._tileHeight;
  9.     const tileId0 = this._readMapData(mx, my, 0);
  10.     const tileId1 = this._readMapData(mx, my, 1);
  11.     const tileId2 = this._readMapData(mx, my, 2);
  12.     const tileId3 = this._readMapData(mx, my, 3);
  13.     const shadowBits = this._readMapData(mx, my, 4);
  14.     const upperTileId1 = this._readMapData(mx, my - 1, 1);

  15.     this._addSpotTile(tileId0, dx, dy);
  16.     this._addSpotTile(tileId1, dx, dy);
  17.     this._addShadow(this._lowerLayer, shadowBits, dx, dy);
  18.     if (this._isTableTile(upperTileId1) && !this._isTableTile(tileId1)) {
  19.         if (!Tilemap.isShadowingTile(tileId0)) {
  20.             this._addTableEdge(this._lowerLayer, upperTileId1, dx, dy);
  21.         }
  22.     }
  23.     if (this._isOverpassPosition(mx, my)) {
  24.         this._addTile(this._upperLayer, tileId2, dx, dy);
  25.         this._addTile(this._upperLayer, tileId3, dx, dy);
  26.     } else {
  27.         this._addSpotTile(tileId2, dx, dy);
  28.         this._addSpotTile(tileId3, dx, dy);
  29.     }
  30. };
  31. // ======================================================================
  32. // * Game_Map
  33. // ======================================================================
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1614
在线时间
227 小时
注册时间
2018-12-9
帖子
131
50
发表于 2023-4-26 08:05:52 | 只看该作者
感谢楼大佬,辛苦了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-2 17:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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