赞 | 189 |
VIP | 627 |
好人卡 | 188 |
积分 | 95 |
经验 | 171230 |
最后登录 | 2024-7-3 |
在线时间 | 5073 小时 |
Lv4.逐梦者 (版主)
- 梦石
- 0
- 星屑
- 9532
- 在线时间
- 5073 小时
- 注册时间
- 2013-6-21
- 帖子
- 3580
  
|
本帖最后由 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? 的代码,然后自行组合一下。
例如上面,假设o表示什么都没有,x表示设置了不可通行的图快,e表示设置了一个不可通行的事件(事件的图片不是元件,而是普通的 4x4 行走图)。
假设中心s的坐标是(2, 2),左上角的坐标是(1, 1)。x坐标横向延伸,y坐标纵向延伸。
那么根据这两个 passable? 的代码,可以得到下面结果
$game_map.passable?(2, 3, 0) # => false, 因为设置了不可通行的图块,0表示全方向不可通行 $game_map.passable?(2, 1, 0) # => true, (2, 1) 正好是事件的位置,Game_Map#passable? 会忽略使用行走图的事件 $game_player.passable?(2, 2, 4) # => true, 假设主角处于(2, 2),那么左边因为没有障碍,所以可通行 $game_player.passable?(2, 2, 8) # => false, 假设主角处于(2, 2),那么上方因为有事件挡着,不可通行 $game_player.passable?(2, 1, 0) # => true, 假设主角处于(2, 1),他实际上和事件重叠了!这种情况下是全方向可以通行的! $game_player.passable?(2, 3, 0) # => false, 假设主角处于(2, 3),他正好踩到一个全方向不能通行的图块,因此任何方向不能通行。
$game_map.passable?(2, 3, 0) # => false, 因为设置了不可通行的图块,0表示全方向不可通行
$game_map.passable?(2, 1, 0) # => true, (2, 1) 正好是事件的位置,Game_Map#passable? 会忽略使用行走图的事件
$game_player.passable?(2, 2, 4) # => true, 假设主角处于(2, 2),那么左边因为没有障碍,所以可通行
$game_player.passable?(2, 2, 8) # => false, 假设主角处于(2, 2),那么上方因为有事件挡着,不可通行
$game_player.passable?(2, 1, 0) # => true, 假设主角处于(2, 1),他实际上和事件重叠了!这种情况下是全方向可以通行的!
$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),两个判断其实是在说完全不同的事情,如果有必要,我觉得你还是应该把完整的代码发一下。
不知道这些例子能不能解释你的疑问。 |
评分
-
查看全部评分
|