class Interpreter
def something(id)
$t = false
event = $game_map.events[id]
if event.y == $game_player.y
if event.x < $game_player.x and $game_player.direction == 4
$t = true
elsif event.x > $game_player.x and $game_player.direction == 6
$t = true
end
elsif event.x == $game_player.x
if event.y < $game_player.y and $game_player.direction == 8
$t = true
elsif event.y > $game_player.y and $game_player.direction == 2
$t = true
end
end
return $t
end
end
以下引用☆流星☆~~~于2009-4-5 13:11:04的发言:
。。。LS 的 LS,哎。- -,有BUG,要走到NPC跟前才嫩判断通过。
LS:
我说明详细好了:
1主角面向这个事件
2这个事件与主角在同1条线上(也就是X坐标1样,或Y坐标1样)
3主角与这个事件之间没有 不可穿头的图块 和 别的事件(润许穿透没打勾)。
3的详细说明:
这个事件 与 角色 在同1条线上了,且角色面向此事件,事件可以不面向。
从角色 到 事件 之间的连线 ,没有障碍物。障碍物指 不可穿透的图块
不可穿透的图块代表 墙 之类的东西。
也就是说,角色不仅面对事件,而且事件 在角色面向 前 部分,从事件到角色没有任何东西阻挡。
class Interpreter
# --------------------------------
# eventID: 目标事件的 ID
# this : 从什么 ID 的事件判断视线,不传值则默认为角色本身
# ---------------------------------
def visionTo(eventID, this = -1)
dest = $game_map.events[eventID]
src = this == -1 ? $game_player : $game_map.events[this]
return true if dest.x == src.x and dest.y == src.y
if dest.x == src.x
range = dest.y < src.y ? (dest.y + 1)...src.y : (src.y + 1)...dest.y
for i in range
event = $game_map.events[$game_map.check_event(dest.x, i)]
return false if event != nil && !event.through
return false if !$game_map.passable?(dest.x, i, 0)
end
return dest.y > src.y && src.direction == 2 ||
dest.y < src.y && src.direction == 8
elsif dest.y == src.y
range = dest.x < src.x ? (dest.x + 1)...src.x : (src.x + 1)...dest.x
for i in range
event = $game_map.events[$game_map.check_event(i, dest.y)]
return false if event != nil and !event.through
return false if !$game_map.passable?(i, dest.y, 0)
end
return dest.x > src.x && src.direction == 6 ||
dest.x < src.x && src.direction == 4
else
return false
end
end
end
# d : 方向 (0,2,4,6,8,10)
# ※ 0,10 = 全方向不能通行的情况的判定 (跳跃等)
# self_event : 自己 (判定事件可以通行的情况下)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |