查看: 2926|回复: 9

[有事请教] 如何将四方向通行性的【出入】分开设定

[复制链接]
梦石
2
星屑
8479
在线时间
463 小时
注册时间
2021-12-4
回帖
486

MZ评测员

发表于 2023-1-9 17:37:09 | 显示全部楼层 |阅读模式

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

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

×
Game_CharacterBase.prototype.isMapPassable = function(x, y, d) {
    const x2 = $gameMap.roundXWithDirection(x, d);
    const y2 = $gameMap.roundYWithDirection(y, d);
    const d2 = this.reverseDir(d);
    return $gameMap.isPassable(x, y, d) && $gameMap.isPassable(x2, y2, d2);
}
上面是mv/mz判定一个人物能否走到相邻某格的函数,可以看到它使用了reverseDir同时判定了【当前图块能否从某个方向离开】和【相邻点图块能否从反方向进入】,但是在图块组设置里这两项是绑定的(相当于设定了一个图块作为正方形的四条边中哪几条可以被穿过)。
那么比如说我要做这样一个图块,它可以【从上、左、下进入】,但只能【向右离开】,怎么做会方便一些呢?
图块组设置里提供了地形标志(terrain tag)但是这东西只支持0-7,但凡它如果支持0-15我都会好办很多qwq
目前想到的唯一思路是在其他bit中找一个用不到的配合terrain tag凑出4个bit来表示(比如说我用不到「有害地形」),但是这样会很不方便查看。
梦石
2
星屑
8479
在线时间
463 小时
注册时间
2021-12-4
回帖
486

MZ评测员

 楼主| 发表于 2023-1-10 23:45:45 | 显示全部楼层
捞一捞,有人帮帮我吗?
回复

使用道具 举报

梦石
2
星屑
8479
在线时间
463 小时
注册时间
2021-12-4
回帖
486

MZ评测员

 楼主| 发表于 2023-1-11 17:47:15 | 显示全部楼层
有没有人啊?!

评分

参与人数 1赞 +1 收起 理由
蜜橘团子 + 1 塞糖

查看全部评分

回复

使用道具 举报

梦石
2
星屑
8479
在线时间
463 小时
注册时间
2021-12-4
回帖
486

MZ评测员

 楼主| 发表于 2023-1-13 12:36:48 | 显示全部楼层
呜呜这个问题真的很难吗qwq

点评

如果不难你自己不就解开了{滑稽}  发表于 2023-1-13 20:46
回复

使用道具 举报

梦石
0
星屑
5314
在线时间
733 小时
注册时间
2022-4-2
回帖
81
发表于 2023-1-13 23:31:49 | 显示全部楼层
不懂代码……但是我觉得你这个效果完全可以用事件做啊……当角色位置和区域位置不同时,他是一个三通行的图块,当他和区域位置重叠时,他是一个单通行图块。 QQ截图20230113233008.png QQ截图20230113233049.png
回复

使用道具 举报

梦石
2
星屑
8479
在线时间
463 小时
注册时间
2021-12-4
回帖
486

MZ评测员

 楼主| 发表于 2023-1-14 00:42:37 | 显示全部楼层
二手电源 发表于 2023-1-13 23:31
不懂代码……但是我觉得你这个效果完全可以用事件做啊……当角色位置和区域位置不同时,他是一个 ...

不太行qwq,且不说要做出这种通行效果的坐标点处可能已经有事件了,且这种通行效果肯定要对主角和NPC都有效呀所以只判定是否与主角重叠是不太行的qwq
至于regionID这个东西我已经用来“从另一张样板地图批量复制指定编号的事件”了qwq
回复

使用道具 举报

梦石
0
星屑
29991
在线时间
5738 小时
注册时间
2016-3-8
回帖
1659
发表于 2023-1-14 01:20:16 | 显示全部楼层
本帖最后由 alexncf125 于 2023-1-14 11:18 编辑
  1. Game_CharacterBase.prototype.isMapPassable = function(x, y, d) {
  2.     var x2 = $gameMap.roundXWithDirection(x, d);
  3.     var y2 = $gameMap.roundYWithDirection(y, d);
  4.     var d2 = this.reverseDir(d);
  5.     if ($gameMap.terrainTag(x, y) == 6 && d != 6 || $gameMap.terrainTag(x2, y2) == 6 && d2 == 6) return false;
  6.     return $gameMap.isPassable(x, y, d) && $gameMap.isPassable(x2, y2, d2);
  7. };
复制代码
再给那格图块的地形标志改成6(通行度为四方皆箭头







回复

使用道具 举报

梦石
2
星屑
8479
在线时间
463 小时
注册时间
2021-12-4
回帖
486

MZ评测员

 楼主| 发表于 2023-1-14 11:23:21 | 显示全部楼层
alexncf125 发表于 2023-1-14 01:20
再给那格图块的地形标志改成6(通行度为四方皆箭头

是的,基本上就是这个思路,但是四方向的“出入”如果独立设置的话最多是有2**8=256种情况,一楼的“三进一出”只是举个例子。
假如说我让默认的四方向通行只管出不管入,那我就需要另外4个二进制位或者说另外一个0~15的值来只管入不管出。
但是地形标志terrain tag在编辑器里只支持0~7,特别头疼呜呜
回复

使用道具 举报

梦石
0
星屑
29991
在线时间
5738 小时
注册时间
2016-3-8
回帖
1659
发表于 2023-1-14 11:55:58 | 显示全部楼层
小秋橙 发表于 2023-1-14 11:23
是的,基本上就是这个思路,但是四方向的“出入”如果独立设置的话最多是有2**8=256种情况,一楼的“三进 ...

那用$gameMap.allTiles(x, y)跟$gameMap.allTiles(x2, y2)来
取代$gameMap.terrainTag(x, y)和$gameMap.terrainTag(x2, y2)吧?

每格图块通过allTiles函数输出的数组都不一样
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部