| 赞 | 0 |
| VIP | |
| 好人卡 | |
| 积分 | 0 |
| 经验 | |
| 最后登录 | 2015-7-19 |
| 在线时间 | 157 小时 |
- 梦石
- 0
- 星屑
- 49
- 在线时间
- 157 小时
- 注册时间
- 2013-8-14
- 回帖
- 155
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 九靈 于 2013-8-29 00:32 编辑
Game_Map
[pre lang="ruby" line="197"] #--------------------------------------------------------------------------
# ● 可以通行判定
# 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
[/pre]
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
|
|