Project1

标题: 如何将四方向通行性的【出入】分开设定 [打印本页]

作者: 小秋橙    时间: 2023-1-9 17:37
标题: 如何将四方向通行性的【出入】分开设定
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来表示(比如说我用不到「有害地形」),但是这样会很不方便查看。
作者: 小秋橙    时间: 2023-1-10 23:45
捞一捞,有人帮帮我吗?
作者: 小秋橙    时间: 2023-1-11 17:47
有没有人啊?!
作者: 小秋橙    时间: 2023-1-13 12:36
呜呜这个问题真的很难吗qwq
作者: 二手电源    时间: 2023-1-13 23:31
不懂代码……但是我觉得你这个效果完全可以用事件做啊……当角色位置和区域位置不同时,他是一个三通行的图块,当他和区域位置重叠时,他是一个单通行图块。
作者: 小秋橙    时间: 2023-1-14 00:42
二手电源 发表于 2023-1-13 23:31
不懂代码……但是我觉得你这个效果完全可以用事件做啊……当角色位置和区域位置不同时,他是一个 ...

不太行qwq,且不说要做出这种通行效果的坐标点处可能已经有事件了,且这种通行效果肯定要对主角和NPC都有效呀所以只判定是否与主角重叠是不太行的qwq
至于regionID这个东西我已经用来“从另一张样板地图批量复制指定编号的事件”了qwq
作者: alexncf125    时间: 2023-1-14 01:20
本帖最后由 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(通行度为四方皆箭头








作者: 小秋橙    时间: 2023-1-14 11:23
alexncf125 发表于 2023-1-14 01:20
再给那格图块的地形标志改成6(通行度为四方皆箭头

是的,基本上就是这个思路,但是四方向的“出入”如果独立设置的话最多是有2**8=256种情况,一楼的“三进一出”只是举个例子。
假如说我让默认的四方向通行只管出不管入,那我就需要另外4个二进制位或者说另外一个0~15的值来只管入不管出。
但是地形标志terrain tag在编辑器里只支持0~7,特别头疼呜呜
作者: alexncf125    时间: 2023-1-14 11:55
小秋橙 发表于 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函数输出的数组都不一样




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1