本帖最后由 0newing 于 2018-6-22 08:15 编辑
加这么一段脚本试试吧……不过飞艇不能通过的地方需要画上区域……总比创建事件块阻挡方便多了
重写了一下几个类的方法,算是达到要求了吧……
不过用了之后飞艇还会被事件块阻挡倒是真的…………
=begin 飞艇无法穿过4号区域,但仍然会被事件块阻挡 当然,几号区域可以自定义~~ =end #============================================================================== # ■ Game_Player #------------------------------------------------------------------------------ # 处理玩家人物的类。拥有事件启动的判定、地图的卷动等功能。 # 本类的实例请参考 $game_player 。 # 首先关闭乘坐飞艇时开启的穿透 #============================================================================== class Game_Player < Game_Character def update_vehicle_get_on if !@followers.gathering? && !moving? @direction = vehicle.direction @move_speed = vehicle.speed @vehicle_getting_on = false @transparent = true vehicle.get_on end end #-------------------------------------------------------------------------- # ● 判定地图能否通行 # d : 方向(2,4,6,8) #-------------------------------------------------------------------------- def map_passable?(x, y, d) case @vehicle_type when :boat $game_map.boat_passable?(x, y) when :ship $game_map.ship_passable?(x, y) when :airship $game_map.airship_passable?(x, y) else super end end end #========================================================================== class Game_Map #-------------------------------------------------------------------------- # ● 通行检查 # bit : 判断通行禁止与否的字节(请参照二进制运算) # 其实我不是很懂这个通行检查,就按照自己的想法去写了 #-------------------------------------------------------------------------- def check_air_passage(x, y, bit) if $game_player.in_airship? return false if region_id(x, y) == 4 #这个数字代表几号区域,可以自行修改 return true end all_tiles(x, y).each do |tile_id| flag = tileset.flags[tile_id] next if flag & 0x10 != 0 if flag & bit == 0 return true end if flag & bit == bit return false end end return false end #-------------------------------------------------------------------------- # ● 判定飞艇是否可以通行 #-------------------------------------------------------------------------- def airship_passable?(x, y) check_air_passage(x, y, 0) end #-------------------------------------------------------------------------- # ● 判定飞艇是否可以着陆 #-------------------------------------------------------------------------- def airship_land_ok?(x, y) check_passage(x, y, 0x0800) && check_passage(x, y, 0x0f) end end
=begin
飞艇无法穿过4号区域,但仍然会被事件块阻挡
当然,几号区域可以自定义~~
=end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# 处理玩家人物的类。拥有事件启动的判定、地图的卷动等功能。
# 本类的实例请参考 $game_player 。
# 首先关闭乘坐飞艇时开启的穿透
#==============================================================================
class Game_Player < Game_Character
def update_vehicle_get_on
if !@followers.gathering? && !moving?
@direction = vehicle.direction
@move_speed = vehicle.speed
@vehicle_getting_on = false
@transparent = true
vehicle.get_on
end
end
#--------------------------------------------------------------------------
# ● 判定地图能否通行
# d : 方向(2,4,6,8)
#--------------------------------------------------------------------------
def map_passable?(x, y, d)
case @vehicle_type
when :boat
$game_map.boat_passable?(x, y)
when :ship
$game_map.ship_passable?(x, y)
when :airship
$game_map.airship_passable?(x, y)
else
super
end
end
end
#==========================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 通行检查
# bit : 判断通行禁止与否的字节(请参照二进制运算)
# 其实我不是很懂这个通行检查,就按照自己的想法去写了
#--------------------------------------------------------------------------
def check_air_passage(x, y, bit)
if $game_player.in_airship?
return false if region_id(x, y) == 4 #这个数字代表几号区域,可以自行修改
return true
end
all_tiles(x, y).each do |tile_id|
flag = tileset.flags[tile_id]
next if flag & 0x10 != 0
if flag & bit == 0
return true
end
if flag & bit == bit
return false
end
end
return false
end
#--------------------------------------------------------------------------
# ● 判定飞艇是否可以通行
#--------------------------------------------------------------------------
def airship_passable?(x, y)
check_air_passage(x, y, 0)
end
#--------------------------------------------------------------------------
# ● 判定飞艇是否可以着陆
#--------------------------------------------------------------------------
def airship_land_ok?(x, y)
check_passage(x, y, 0x0800) && check_passage(x, y, 0x0f)
end
end
|