加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 九靈 于 2013-8-29 00:32 编辑
Game_Map
#--------------------------------------------------------------------------
# ● 可以通行判定
# x : X 坐标
# y : Y 坐标
# d : 方向 (0,2,4,6,8,10)
# ※ 0,10 = 全方向不能通行的情况的判定 (跳跃等)
# self_event : 自己 (判定事件可以通行的情况下)
#--------------------------------------------------------------------------
def passable?( x, y, d, self_event = nil )
# 被给予的坐标地图外的情况下
unless valid?( x, y)
# 不能通行
return false
end
# 方向 (0,2,4,6,8,10) 与障碍物接触 (0,1,2,4,8,0) 后变换
bit = ( 1 << ( d / 2 - 1 ) ) & 0x0f
# 循环全部的事件
for event in events.values
# 自己以外的元件与坐标相同的情况
if event.tile_id >= 0 and event != self_event and
event.x == x and event.y == y and not event.through
# 如果障碍物的接触被设置的情况下
if @passages [ event.tile_id ] & bit != 0
# 不能通行
return false
# 如果全方向的障碍物的接触被设置的情况下
elsif @passages [ event.tile_id ] & 0x0f == 0x0f
# 不能通行
return false
# 这以外的优先度为 0 的情况下
elsif @priorities [ event.tile_id ] == 0
# 可以通行
return true
end
end
end
#--------------------------------------------------------------------------
# ● 可以通行判定
# x : X 坐标
# y : Y 坐标
# d : 方向 (0,2,4,6,8,10)
# ※ 0,10 = 全方向不能通行的情况的判定 (跳跃等)
# self_event : 自己 (判定事件可以通行的情况下)
#--------------------------------------------------------------------------
def passable?( x, y, d, self_event = nil )
# 被给予的坐标地图外的情况下
unless valid?( x, y)
# 不能通行
return false
end
# 方向 (0,2,4,6,8,10) 与障碍物接触 (0,1,2,4,8,0) 后变换
bit = ( 1 << ( d / 2 - 1 ) ) & 0x0f
# 循环全部的事件
for event in events.values
# 自己以外的元件与坐标相同的情况
if event.tile_id >= 0 and event != self_event and
event.x == x and event.y == y and not event.through
# 如果障碍物的接触被设置的情况下
if @passages [ event.tile_id ] & bit != 0
# 不能通行
return false
# 如果全方向的障碍物的接触被设置的情况下
elsif @passages [ event.tile_id ] & 0x0f == 0x0f
# 不能通行
return false
# 这以外的优先度为 0 的情况下
elsif @priorities [ event.tile_id ] == 0
# 可以通行
return true
end
end
end
F1 :
passages
通行表。是包含了通行标记,草木繁茂处标记和柜台标记的一维数组(Table)。
取地图元件 ID 作为索引。各位的对应如下所示。
0x01 : 下方向通行不能。
0x02 : 左方向通行不能。
0x04 : 右方向通行不能。
0x08 : 上方向通行不能。
0x40 : 草木繁茂处标记。
0x80 : 柜台标记。
问题 :
1. 能说明下bit = (1 << (d / 2 - 1)) & 0x0f 的<<, &, 0x0f 吗?
2. 说明@passages[event.tile_id] & bit != 0
3. 同上@passages[event.tile_id] & 0x0f == 0x0f