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

Project1

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

[已经解决] 关于判定地图某个坐标可否通行的命令

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3293
在线时间
1463 小时
注册时间
2014-8-9
帖子
337
跳转到指定楼层
1
发表于 2017-4-22 02:05:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我使用了 $game_map.passable?(x,y,d)
然而我发现它会忽略事件,包含对事件的判定是哪个命令?
$game_player.passable?(x,y,d)好像也不包含事件呀
我的寻路脚本老出错,几个事件就把人挡住了
用了以上两个命令都没有用

点评

那只是判断能否通行,可没禁止通行。你要证明对事件和对人不同,那你要P出他对人和对事时$game_map.passable?(x,y,d)会显示什么  发表于 2017-4-22 08:27

Lv5.捕梦者 (版主)

梦石
1
星屑
23984
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2017-4-22 02:19:51 手机端发表。 | 只看该作者
参考一下其他人写的寻路脚本呗^_^
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

3
发表于 2017-4-22 09:35:48 | 只看该作者
本帖最后由 RyanBern 于 2017-4-24 00:27 编辑

这两个方法的含义是:
Game_Map#passable?(x, y, d) 地图上坐标为(x, y)的地方在方向d是否可通行。这个方法只考虑事件图片是地图元件的情况,其他情况不考虑。
Game_Player#passable?(x,y,d) 假设玩家处于(x, y)并且他要往d方向走,那么他是否能走通。这个方法考虑了地图上的所有情况,包括元件,事件等等。
需要额外注意的一点是,假设玩家和事件重叠,并且该处没有其他不可通行的元件时,会被判定为可通行。

所以$game_player.passable?(x, y, d) 可能是你需要的,是不是使用的姿势不对导致的呢?



没有直接判断一个点是不是可通行(并且考虑事件)的方法,需要的话可以自己写。
$game_player.passable?(x, y, d) 表示的是假设角色在(x, y)处,那么他往 d 方向走是否能走通。这里考虑了事件的情况。
可以参考$game_map.passable? 和 $game_player.passable? 的代码,然后自行组合一下。




  1. oeo
  2. oso
  3. xxx
复制代码

例如上面,假设o表示什么都没有,x表示设置了不可通行的图快,e表示设置了一个不可通行的事件(事件的图片不是元件,而是普通的 4x4 行走图)。
假设中心s的坐标是(2, 2),左上角的坐标是(1, 1)。x坐标横向延伸,y坐标纵向延伸。

那么根据这两个 passable? 的代码,可以得到下面结果
RUBY 代码复制
  1. $game_map.passable?(2, 3, 0) # => false, 因为设置了不可通行的图块,0表示全方向不可通行
  2. $game_map.passable?(2, 1, 0) # => true,  (2, 1) 正好是事件的位置,Game_Map#passable? 会忽略使用行走图的事件
  3. $game_player.passable?(2, 2, 4) # => true,  假设主角处于(2, 2),那么左边因为没有障碍,所以可通行
  4. $game_player.passable?(2, 2, 8) # => false, 假设主角处于(2, 2),那么上方因为有事件挡着,不可通行
  5. $game_player.passable?(2, 1, 0) # => true,  假设主角处于(2, 1),他实际上和事件重叠了!这种情况下是全方向可以通行的!
  6. $game_player.passable?(2, 3, 0) # => false, 假设主角处于(2, 3),他正好踩到一个全方向不能通行的图块,因此任何方向不能通行。

请注意上面例子中的坐标,在 Game_Map 中,是读取该坐标的信息并返回通行度;在 Game_Player 中,是将玩家放到这个坐标上考虑,只考虑一个方向,看看是否走得通。请仔细体会这里的区别。

比如,因为(2, 3)这个位置是x,所以角色处于(2, 2)时,你问他往下走能否走通,结论当然是不能。

所以,没有读取该坐标的信息(并考虑事件)并返回通行度的方法。你所能做的只能是从它的邻居考虑。
因此,你给出的代码中,$game_map.passable?(i, j, d, character) && $game_player.passable?(i, j, d),两个判断其实是在说完全不同的事情,如果有必要,我觉得你还是应该把完整的代码发一下。

不知道这些例子能不能解释你的疑问。

点评

直接点击主楼的【标记已解决】按钮即可。另一个版主会帮你采纳这个回复的(  发表于 2017-4-26 21:37
我懂了,采纳这一楼作为答案吧 另外采纳答案是怎么操作的  发表于 2017-4-26 21:19
没有,可以自己写一行代码判断一下。例如 $game_map.events.values.any?{|ev| ev.x == x && ev.y == y} 之类的(未测试)。  发表于 2017-4-24 18:16
那有没有判断一个地方(x,y)有没有事件的命令语句?  发表于 2017-4-24 17:26
没错错呀,我有四个方向的这样的判断句 除了2还有4,6,8方向  发表于 2017-4-23 23:47

评分

参与人数 1梦石 +1 收起 理由
guoxiaomi + 1 另一个版主出现了

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-21 20:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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