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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
5437
在线时间
391 小时
注册时间
2021-12-4
帖子
416
跳转到指定楼层
1
发表于 2023-1-9 17:37:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
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来表示(比如说我用不到「有害地形」),但是这样会很不方便查看。

Lv4.逐梦者

梦石
0
星屑
5437
在线时间
391 小时
注册时间
2021-12-4
帖子
416
2
 楼主| 发表于 2023-1-10 23:45:45 | 只看该作者
捞一捞,有人帮帮我吗?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5437
在线时间
391 小时
注册时间
2021-12-4
帖子
416
3
 楼主| 发表于 2023-1-11 17:47:15 | 只看该作者
有没有人啊?!

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5437
在线时间
391 小时
注册时间
2021-12-4
帖子
416
4
 楼主| 发表于 2023-1-13 12:36:48 | 只看该作者
呜呜这个问题真的很难吗qwq

点评

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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4331
在线时间
548 小时
注册时间
2022-4-2
帖子
78
5
发表于 2023-1-13 23:31:49 | 只看该作者
不懂代码……但是我觉得你这个效果完全可以用事件做啊……当角色位置和区域位置不同时,他是一个三通行的图块,当他和区域位置重叠时,他是一个单通行图块。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5437
在线时间
391 小时
注册时间
2021-12-4
帖子
416
6
 楼主| 发表于 2023-1-14 00:42:37 | 只看该作者
二手电源 发表于 2023-1-13 23:31
不懂代码……但是我觉得你这个效果完全可以用事件做啊……当角色位置和区域位置不同时,他是一个 ...

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

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
24322
在线时间
5052 小时
注册时间
2016-3-8
帖子
1620
7
发表于 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(通行度为四方皆箭头







回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5437
在线时间
391 小时
注册时间
2021-12-4
帖子
416
8
 楼主| 发表于 2023-1-14 11:23:21 | 只看该作者
alexncf125 发表于 2023-1-14 01:20
再给那格图块的地形标志改成6(通行度为四方皆箭头

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

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
24322
在线时间
5052 小时
注册时间
2016-3-8
帖子
1620
9
发表于 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函数输出的数组都不一样
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 17:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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