查看: 3669|回复: 9

[已经解决] 请问,能否让飞艇不能穿过世界地图的山峰,如图

[复制链接]
梦石
0
星屑
4627
在线时间
818 小时
注册时间
2017-7-14
回帖
116

开拓者

发表于 2018-5-4 00:04:38 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
请问,能否让飞艇不能穿过世界地图的山峰,,如图:
20180504000409.png
123.png
梦石
0
星屑
1967
在线时间
185 小时
注册时间
2018-3-27
回帖
4
发表于 2018-5-4 08:00:38 | 显示全部楼层
本帖最后由 550214926 于 2018-5-4 11:03 编辑

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

点评

那得围多少事件啊,地图是400多乘400多的  发表于 2018-5-4 08:07
回复

使用道具 举报

梦石
0
星屑
1967
在线时间
185 小时
注册时间
2018-3-27
回帖
4
发表于 2018-5-4 11:01:16 | 显示全部楼层
本帖最后由 550214926 于 2018-5-4 11:08 编辑

图块设置在数据库
1 打开数据库
2 点击图块
3 找到对应的地图元件
4 O这个符号代表可通行,X这个符号代表不可通行,这两个符号都是可点击的。
回复

使用道具 举报

梦石
0
星屑
1261
在线时间
423 小时
注册时间
2011-6-30
回帖
470
发表于 2018-5-4 16:17:35 | 显示全部楼层
本帖最后由 0newing 于 2018-6-22 08:15 编辑

加这么一段脚本试试吧……不过飞艇不能通过的地方需要画上区域……总比创建事件块阻挡方便多了
重写了一下几个类的方法,算是达到要求了吧……
不过用了之后飞艇还会被事件块阻挡倒是真的…………
[pre lang="ruby"]
=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
[/pre]

点评

谢谢大大,已经完美解决,大大写脚本辛苦了。  发表于 2018-5-4 16:51

评分

参与人数 1星屑 +100 收起 理由
VIPArcher + 100 认可答案

查看全部评分

点这里给我发邮件
有事欢迎给我发邮件哟~~
不出意外的话都会回复的哟~~~
邮箱:disciple_sneaker@163.com
个人主页:curatorjin.github.io
回复 1 0

使用道具 举报

梦石
0
星屑
9818
在线时间
1648 小时
注册时间
2012-6-6
回帖
306
发表于 2018-6-19 16:43:16 | 显示全部楼层
0newing 发表于 2018-5-4 16:17
加这么一段脚本试试吧……不过飞艇不能通过的地方需要画上区域……总比创建事件块阻挡方便多了
重写了一下 ...

发现一个小小的问题,海面上可以降下飞空艇    (海面上应该是不可以降下飞空艇得)  

点评

emmmmm……明晚找个时间改改……谢谢提醒哈~~  发表于 2018-6-20 01:57

评分

参与人数 1赞 +1 收起 理由
0newing + 1 塞糖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
1261
在线时间
423 小时
注册时间
2011-6-30
回帖
470
发表于 2018-6-20 23:22:46 | 显示全部楼层
流浪杰哥 发表于 2018-6-19 16:43
发现一个小小的问题,海面上可以降下飞空艇    (海面上应该是不可以降下飞空艇得)   ...

已经改好啦~~另建了判定飞艇通行的方法
以前的那个确实可以在任意地点降落,现在已经修复啦~~
点这里给我发邮件
有事欢迎给我发邮件哟~~
不出意外的话都会回复的哟~~~
邮箱:disciple_sneaker@163.com
个人主页:curatorjin.github.io
回复

使用道具 举报

梦石
0
星屑
9818
在线时间
1648 小时
注册时间
2012-6-6
回帖
306
发表于 2018-6-24 20:53:08 | 显示全部楼层
0newing 发表于 2018-6-20 23:22
已经改好啦~~另建了判定飞艇通行的方法
以前的那个确实可以在任意地点降落,现在已经修复啦~~ ...

感谢大佬解决了问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部