Project1

标题: 请问,能否让飞艇不能穿过世界地图的山峰,如图 [打印本页]

作者: wan5337088    时间: 2018-5-4 00:04
标题: 请问,能否让飞艇不能穿过世界地图的山峰,如图
请问,能否让飞艇不能穿过世界地图的山峰,,如图:

20180504000409.png (111.4 KB, 下载次数: 33)

20180504000409.png

123.png (136 KB, 下载次数: 36)

123.png

作者: 550214926    时间: 2018-5-4 08:00
本帖最后由 550214926 于 2018-5-4 11:03 编辑

用不可穿透的事件围一圈
如果是部分山峰的话用事件围起来是最简单的方法,若是全部的话就更简单了,只要用山峰图块的通行设置定为不可通过就行。

作者: 550214926    时间: 2018-5-4 11:01
本帖最后由 550214926 于 2018-5-4 11:08 编辑

图块设置在数据库
1 打开数据库
2 点击图块
3 找到对应的地图元件
4 O这个符号代表可通行,X这个符号代表不可通行,这两个符号都是可点击的。
作者: 0newing    时间: 2018-5-4 16:17
本帖最后由 0newing 于 2018-6-22 08:15 编辑

加这么一段脚本试试吧……不过飞艇不能通过的地方需要画上区域……总比创建事件块阻挡方便多了
重写了一下几个类的方法,算是达到要求了吧……
不过用了之后飞艇还会被事件块阻挡倒是真的…………
RUBY 代码复制
  1. =begin
  2. 飞艇无法穿过4号区域,但仍然会被事件块阻挡
  3. 当然,几号区域可以自定义~~
  4. =end
  5. #==============================================================================
  6. # ■ Game_Player
  7. #------------------------------------------------------------------------------
  8. #  处理玩家人物的类。拥有事件启动的判定、地图的卷动等功能。
  9. #   本类的实例请参考 $game_player 。
  10. #   首先关闭乘坐飞艇时开启的穿透
  11. #==============================================================================
  12.  
  13. class Game_Player < Game_Character
  14.   def update_vehicle_get_on
  15.     if !@followers.gathering? && !moving?
  16.       @direction = vehicle.direction
  17.       @move_speed = vehicle.speed
  18.       @vehicle_getting_on = false
  19.       @transparent = true
  20.       vehicle.get_on
  21.     end
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 判定地图能否通行
  25.   #     d : 方向(2,4,6,8)
  26.   #--------------------------------------------------------------------------
  27.   def map_passable?(x, y, d)
  28.     case @vehicle_type
  29.     when :boat
  30.       $game_map.boat_passable?(x, y)
  31.     when :ship
  32.       $game_map.ship_passable?(x, y)
  33.     when :airship
  34.       $game_map.airship_passable?(x, y)
  35.     else
  36.       super
  37.     end
  38.   end
  39. end
  40. #==========================================================================
  41.   class Game_Map
  42. #--------------------------------------------------------------------------
  43. # ● 通行检查
  44. #     bit : 判断通行禁止与否的字节(请参照二进制运算)
  45. #     其实我不是很懂这个通行检查,就按照自己的想法去写了
  46. #--------------------------------------------------------------------------
  47.   def check_air_passage(x, y, bit)
  48.     if $game_player.in_airship?
  49.       return false if region_id(x, y) == 4    #这个数字代表几号区域,可以自行修改
  50.       return true
  51.     end
  52.     all_tiles(x, y).each do |tile_id|
  53.       flag = tileset.flags[tile_id]
  54.       next if flag & 0x10 != 0
  55.                         if flag & bit == 0
  56.                                 return true
  57.                         end
  58.                         if flag & bit == bit
  59.                                 return false
  60.                         end
  61.                 end
  62.                 return false
  63.         end
  64.   #--------------------------------------------------------------------------
  65.   # ● 判定飞艇是否可以通行
  66.   #--------------------------------------------------------------------------
  67.   def airship_passable?(x, y)
  68.     check_air_passage(x, y, 0)
  69.   end
  70.  
  71.   #--------------------------------------------------------------------------
  72.   # ● 判定飞艇是否可以着陆
  73.   #--------------------------------------------------------------------------
  74.   def airship_land_ok?(x, y)
  75.     check_passage(x, y, 0x0800) && check_passage(x, y, 0x0f)
  76.   end
  77. end

作者: 流浪杰哥    时间: 2018-6-19 16:43
0newing 发表于 2018-5-4 16:17
加这么一段脚本试试吧……不过飞艇不能通过的地方需要画上区域……总比创建事件块阻挡方便多了
重写了一下 ...

发现一个小小的问题,海面上可以降下飞空艇    (海面上应该是不可以降下飞空艇得)  
作者: 0newing    时间: 2018-6-20 23:22
流浪杰哥 发表于 2018-6-19 16:43
发现一个小小的问题,海面上可以降下飞空艇    (海面上应该是不可以降下飞空艇得)   ...

已经改好啦~~另建了判定飞艇通行的方法
以前的那个确实可以在任意地点降落,现在已经修复啦~~
作者: 流浪杰哥    时间: 2018-6-24 20:53
0newing 发表于 2018-6-20 23:22
已经改好啦~~另建了判定飞艇通行的方法
以前的那个确实可以在任意地点降落,现在已经修复啦~~ ...

感谢大佬解决了问题




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1