| 
 
| 赞 | 13 |  
| VIP | 118 |  
| 好人卡 | 28 |  
| 积分 | 13 |  
| 经验 | 35779 |  
| 最后登录 | 2017-7-6 |  
| 在线时间 | 1564 小时 |  
 Lv3.寻梦者 
	梦石0 星屑1305 在线时间1564 小时注册时间2008-7-30帖子4418 
 | 
| 本帖最后由 DeathKing 于 2011-11-7 14:05 编辑 
 参见VX指导手册:RPG Maker VX -> 地图 -> 通行设定
 
 在B~E组的元件中会有另外一个星号标记 ☆ ,代表该元件的优先级在主角之上。
 写代码很快,但是发现了一个BUG:VX的地图绘制是互斥的,B层绘制后再绘制C层,则C层会覆盖B层,因此,不可能检查A、B、C层的通行设定。考虑到楼主的需求,给出的代码只检查了B层的对应区域是否为 [☆] 。楼住可以参考Game_Map#passable?方法来修改此方法。
 
 使用方法:$game_map.mask?(x,y) 检查当前地图x,y坐标处的B层图块是否设置为[☆]。
 复制代码class Game_Map
  #--------------------------------------------------------------------------
  # ● 判断是否为五角星
  #     x    : X 坐标
  #     y    : Y 坐标
  #--------------------------------------------------------------------------
  def mask?(x, y)
    # 考虑到只检查主角是否躲在树下,因此只检查B层
    tile_id = @map.data[x, y, 1]          # 获取元件 ID
    return false if tile_id == nil        # 获取元件 ID 失败 : 不可以通行
    pass = @passages[tile_id]             # 获取通行属性
    return true if pass & 0x10 == 0x10    # [☆] : 不受通行影响
    return false                          # 不可以通行
  end
end
 | 
 |