查看: 6542|回复: 24

[已经解决] 在水里面行走的问题。

[复制链接]
梦石
0
星屑
101
在线时间
66 小时
注册时间
2015-6-4
回帖
54
发表于 2015-6-5 17:17:39 | 显示全部楼层 |阅读模式

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

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

×
河道有梯子下去 其他地方不能走到河道 在河道内可以自由行走 怎么实现
QQ截图20150605171555.png

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2015-6-5 17:24:33 | 显示全部楼层
把水域或草地的图块做成5种,分别为:
4方向通行;
限制向右通行;
限制向左通行;
限制向上通行;
限制向下通行。
然后进行地图绘制。

点评

用「墙壁」图块不就好了= =  发表于 2015-6-5 19:46
回复

使用道具 举报

梦石
0
星屑
101
在线时间
66 小时
注册时间
2015-6-4
回帖
54
 楼主| 发表于 2015-6-5 17:29:52 | 显示全部楼层
有没有脚本的方法,通用点的,比如 角色走到1号区域 就触发 只能走1号和0号区域,角色回到0号区域就触发 只能走到1号区域,做图块真的好麻烦。

点评

有,不過要找找在那裏  发表于 2015-6-5 18:16
回复

使用道具 举报

梦石
0
星屑
101
在线时间
66 小时
注册时间
2015-6-4
回帖
54
 楼主| 发表于 2015-6-5 17:31:46 | 显示全部楼层
谢谢版主了,实在没办法只能做图块了,新手刚刚研究这个软件,只有想法,没有办法
回复

使用道具 举报

梦石
0
星屑
101
在线时间
66 小时
注册时间
2015-6-4
回帖
54
 楼主| 发表于 2015-6-5 17:35:40 | 显示全部楼层
我一开始设置的事件块 填满河道周围 还是很满意,结果 移到公司笔记本上运行了下马上卡死,才想起来事件块太多会掉帧,家里的是i7的完全没影响,配置低的电脑完全没办法玩了。
回复

使用道具 举报

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
回帖
659

开拓者

发表于 2015-6-5 17:44:13 | 显示全部楼层
我的话,是直接自己建立个了完全空白的图片,然后给这张图设定四方通行度,然后把这个图片作为追加图片导入游戏,再直接覆盖再原本图层里面
这样做的好处是,可以重复利用这些做好了通行度的图片,能够适用再任何画面之上。
回复

使用道具 举报

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2015-6-5 18:07:04 | 显示全部楼层
得了,我去写个简单的脚本吧,应该也不麻烦。
回复

使用道具 举报

梦石
0
星屑
101
在线时间
66 小时
注册时间
2015-6-4
回帖
54
 楼主| 发表于 2015-6-5 18:21:55 | 显示全部楼层
三途亚梦 发表于 2015-6-5 18:07
得了,我去写个简单的脚本吧,应该也不麻烦。

什么时候我也能成为个高手啊。要求不高能 将自己的思路做成游戏就行。

点评

_(:з」∠)_ ruby很容易入门的。我也只是用一丁点知识尽量做出效果而已。  发表于 2015-6-5 19:14
友情提示:提问区少发和问题无关的帖子哦。要聊天可以点评或者去水区  发表于 2015-6-5 18:28
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2015-6-5 18:46:19 | 显示全部楼层
http://blueredzone.com/script/vxace/vxace_movableregion.html
書式
==移動制限:%region%==

例:リージョン60のみ移動可能
==移動制限:60==

例:リージョン30と60のみ移動可能
==移動制限:30+60==

例:リージョン60は移動不可
==移動制限:0-60==

例:リージョン30と60は移動不可
==移動制限:0-30-60==

また,上記の設定では「移動ルートの設定」での強制移動に対する制限はありません.
強制移動に対する制限は次の記述で行います.
==!移動制限:%region%==

自律移動と強制移動の両方で同一の制限をかける場合は同じ%region%の注釈を以下のように記述する必要があります.
==移動制限:%region%==
==!移動制限:%region%==


パーティーの行動制限

パーティーに対する移動制限はこのスクリプト内の詳細設定にて行います.

それぞれの設定項目について%regon%部分のみを文字列で指定します.

PARTY_MOVABLE_REGION_WALK
    歩行時自律移動のリージョンです
PARTY_MOVABLE_REGION_BOAT
    小型船時自律移動のリージョンです
PARTY_MOVABLE_REGION_SHIP
    大型船時自律移動のリージョンです
PARTY_MOVABLE_REGION_AIRSHIP
    飛行船時自律移動のリージョンです
PARTY_FORCE_MOVABLE_REGION_WALK
    歩行時強制移動のリージョンです
PARTY_FORCE_MOVABLE_REGION_BOAT
    小型船時強制移動のリージョンです
PARTY_FORCE_MOVABLE_REGION_SHIP
    大型船時強制移動のリージョンです
PARTY_FORCE_MOVABLE_REGION_AIRSHIP
    飛行船時強制移動のリージョンです


キャラクター移動制限[pre lang="ruby"]
#==============================================================================
# ■ BMSP キャラクター移動制限[MOVABLEREGION] Ver1.00 2012/10/29
#------------------------------------------------------------------------------
#  キャラのランダム移動の行動範囲を制限します.
#==============================================================================
#------------------------------------------------------------------------------
# ■内容
# マップ上のキャラの行動範囲をリージョンで制限できます.
# ランダム移動の範囲制限や見えない通路,
# 乗り物の移動制限を自由に設定することが可能です.
#
# 位置:特に指定はありません
#
# ■使用方法
# スクリプトに丸ごと貼り付けていただければ使用できます.
#
# * マップの設定
# マップには移動不可または移動範囲に設定したい部分に
# 任意のIDのリージョンを設定します.
#
# * イベントの移動制限
# イベントの移動制限はイベントの各ページごとに設定します.
# イベントのページの実行内容に以下のフォーマットの注釈を追加します.
#   ==移動制限:%region%==
# %region%は次の2パターンのどちらかで記述します.
#   1,移動可能に設定したいリージョンIDを"+"で連結する
#   2,移動不可に設定したいリージョンIDを先頭に"0"を付けて"-"で連結する
# イメージとしては最初はすべて移動不可で,移動可能にするリージョンを"+"か"-"で
# 増減していきます.このとき,"0"はすべてのリージョンを表します.
#
# 例:リージョン60のみ移動可能
#    ==移動制限:60==
# 例:リージョン30と60のみ移動可能
#    ==移動制限:30+60==
# 例:リージョン60は移動不可
#    ==移動制限:0-60==
# 例:リージョン30と60は移動不可
#    ==移動制限:0-30-60==
#
# また,上記の設定では「移動ルートの設定」での強制移動に対する制限はありません.
# 強制移動に対する制限は次の記述で行います.
#   ==!移動制限:%region%==
# 自律移動と強制移動の両方で同一の制限をかける場合は同じ%region%の注釈を
#   ==移動制限:%region%==
#   ==!移動制限:%region%==
# と記述する必要があります.
#
# * パーティーの移動制限
# パーティーに対する移動制限はこのスクリプト内の詳細設定にて行います.
# それぞれについて%regon%部分のみを文字列で指定します.
# ・PARTY_MOVABLE_REGION_WALK:歩行時自律移動のリージョンです
# ・PARTY_MOVABLE_REGION_BOAT:小型船時自律移動のリージョンです
# ・PARTY_MOVABLE_REGION_SHIP:大型船時自律移動のリージョンです
# ・PARTY_MOVABLE_REGION_AIRSHIP:飛行船時自律移動のリージョンです
# ・PARTY_FORCE_MOVABLE_REGION_WALK:歩行時強制移動のリージョンです
# ・PARTY_FORCE_MOVABLE_REGION_BOAT:小型船時強制移動のリージョンです
# ・PARTY_FORCE_MOVABLE_REGION_SHIP:大型船時強制移動のリージョンです
# ・PARTY_FORCE_MOVABLE_REGION_AIRSHIP:飛行船時強制移動のリージョンです
#
# ■注意
# このスクリプトでは
# 「Game_Event」「Game_Player」
# のメソッドを改変しています.
# ■情報
# このスクリプトはgentlawkによって作られたものです.
# 利用規約はhttp://blueredzone.comをご覧ください.
#------------------------------------------------------------------------------
module BMSP
  @@includes ||= {}
  @@includes[:MovableRegion] = 1.00
  module MovableRegion
    #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
    #詳細設定
    PARTY_MOVABLE_REGION_WALK = "0"
    PARTY_MOVABLE_REGION_BOAT = "0"
    PARTY_MOVABLE_REGION_SHIP = "0"
    PARTY_MOVABLE_REGION_AIRSHIP = "0"
    PARTY_FORCE_MOVABLE_REGION_WALK = "0"
    PARTY_FORCE_MOVABLE_REGION_BOAT = "0"
    PARTY_FORCE_MOVABLE_REGION_SHIP = "0"
    PARTY_FORCE_MOVABLE_REGION_AIRSHIP = "0"
    #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
    EXT = /[+-][0-9]+/o
    MATCH = /==移動制限:([0-9]+)(.*)==/o
    MATCH2 = /==!移動制限:([0-9]+)(.*)==/o
    #--------------------------------------------------------------------------
    # ● 正規表現とのマッチ
    #--------------------------------------------------------------------------
    def self.match(str,force = false)
      match = force ? MATCH2 : MATCH
      if match =~ str
        base = $1.to_i
        adds = []
        subs = []
        $2.scan(EXT) do |ext|
          ext = ext.to_i
          ext > 0 ? adds.push(ext) : subs.push(-ext)
        end
        return base,adds,subs
      end
      return nil
    end
  end
end
#==============================================================================
# ■ Game_Event
#==============================================================================
class Game_Event
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias bmsp_movableregion_initialize initialize
  def initialize(map_id, event)
    @bmsp_movable_region = {}
    @bmsp_force_movable_region = {}
    bmsp_movableregion_initialize(map_id, event)
  end
  #--------------------------------------------------------------------------
  # ● 通行可能判定
  #     d : 方向(2,4,6,8)
  #--------------------------------------------------------------------------
  def passable?(x, y, d)
    return false unless super
    x2 = $game_map.round_x_with_direction(x, d)
    y2 = $game_map.round_y_with_direction(y, d)
    return false unless bmsp_movableregion_check_movable_region(x2,y2,@move_route_forcing)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 現在のイベントページから移動制限を設定
  #--------------------------------------------------------------------------
  def bmsp_movableregion_set_movable_region
    list = @list.select{|event| event.code == 108}
    region = nil
    force_region = nil
    list.each do |event|
      unless region
        reg = BMSP::MovableRegion.match(event.parameters.first,false)
        (region = reg; next) if reg
      end
      unless force_region
        reg = BMSP::MovableRegion.match(event.parameters.first,true)
        (force_region = reg; next) if reg
      end
      break if region && force_region
    end
    # キャッシュ
    @bmsp_movable_region[@page] = region ? region : []
    @bmsp_force_movable_region[@page] = force_region ? force_region : []
  end
  #--------------------------------------------------------------------------
  # ● 通行可能なリージョンか判定
  #--------------------------------------------------------------------------
  def bmsp_movableregion_check_movable_region(x,y,force)
    return true if debug_through?
    bmsp_movableregion_set_movable_region unless @bmsp_movable_region[@page]
    region = force ? @bmsp_force_movable_region[@page] : @bmsp_movable_region[@page]
    return true if region.empty?
    base, adds, subs = region
    if base == 0
      return !subs.include?($game_map.region_id(x,y))
    else
      return (adds + [base]).include?($game_map.region_id(x,y))
    end
  end
end
#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias bmsp_movableregion_initialize initialize
  def initialize
    bmsp_movableregion_initialize
    bmsp_movableregion_set_movable_region
  end
  #--------------------------------------------------------------------------
  # ● 通行可能判定
  #     d : 方向(2,4,6,8)
  #--------------------------------------------------------------------------
  def passable?(x, y, d)
    return false unless super
    x2 = $game_map.round_x_with_direction(x, d)
    y2 = $game_map.round_y_with_direction(y, d)
    return false unless bmsp_movableregion_check_movable_region(x2,y2,@move_route_forcing,@vehicle_type)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 詳細設定から移動制限を設定
  #--------------------------------------------------------------------------
  def bmsp_movableregion_set_movable_region
    @bmsp_movable_region = {}
    @bmsp_force_movable_region = {}
    [:walk,:boat,:ship,:airship].each do |type|
      upcase = type.to_s.upcase
      [false,true].each do |force|
        str = BMSP::MovableRegion.module_eval{
                const_get("PARTY_#{force ? "FORCE_" : ""}MOVABLE_REGION_#{upcase}")
              }
        str = "==#{force ? "!" : ""}移動制限:#{str}=="
        reg = BMSP::MovableRegion.match(str,force)
        if force
          @bmsp_force_movable_region[type] = reg ? reg : []
        else
          @bmsp_movable_region[type] = reg ? reg : []
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 通行可能なリージョンか判定
  #--------------------------------------------------------------------------
  def bmsp_movableregion_check_movable_region(x,y,force,type)
    return true if debug_through?
    region = force ? @bmsp_force_movable_region[type] : @bmsp_movable_region[type]
    return true if region.empty?
    base, adds, subs = region
    if base == 0
      return !subs.include?($game_map.region_id(x,y))
    else
      return (adds + [base]).include?($game_map.region_id(x,y))
    end
  end
end
        [/pre]                                       


回复

使用道具 举报

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2015-6-5 19:13:03 | 显示全部楼层
本帖最后由 三途亚梦 于 2015-6-6 16:00 编辑

大概这样,如有问题请回复。
目前以下的通行判断优先于其它,即即使开启了允许穿透,玩家依然受区域移动方向的限制。

[pre lang="ruby"]#==============================================================================
# +++ 限制移动方向的特定区域 +++
#==============================================================================
# 提问区应求 By 三途亚梦
#==============================================================================
# 本脚本的作用给区域自定义不同方向的通行。
#==============================================================================
#
# ★在Nopassaingregion按照[区域ID, 通行方向的ID]
#  的格式写下数值就能使得特定区域的图块不可通行。
#
# ★因为发现流体属性的地形对人物的特殊影响,所以对流体(即草地深度)的方法也做了调整
# 在事件页第一行用【注释】写上“桥”的话,
# 这个事件所在方格将忽略流体地型使得行走图部分透明的效果。
#
#  其中代表通行方向的ID为:
#  向下(2) 向左(4) 向右(6) 向上 (8)
#
#==============================================================================
module Amu
  module Region_Nopassaing

  Nopassaingregion = [[11, 2], [12, 4], [13, 6], [14, 8],
                      [15, 8, 4], [16, 8, 6], [17, 2, 4], [18, 2, 6]]
  #这里默认使用了11~18号区域,分别为
  #11禁止向下;12禁止向左;13禁止向右;14禁止向上
  #15禁止向上和向左;16禁止向上向右;17禁止向下向左;18禁止向下向右。
   
  end
end

class Game_CharacterBase
  #--------------------------------------------------------------------------
  # ● 更新草木深度
  #--------------------------------------------------------------------------
  alias amu_20150606_update_bush_depth update_bush_depth
  def update_bush_depth
    if bush? && !$game_map.events_xy(@x, @y).empty?
      e = $game_map.events_xy(@x, @y)[0].list[0].parameters[0] == "桥"
      e ? @bush_depth = 0 : amu_20150606_update_bush_depth
    else
      amu_20150606_update_bush_depth
    end
  end
  #--------------------------------------------------------------------------
  # ● 判定是否可以通行(检查 地图的通行度 和 前方是否有路障)
  #     d : 方向(2,4,6,8)
  #--------------------------------------------------------------------------
  alias amu_20150606_passable_without_region? passable?
  def passable?(x, y, d)
    regions = Amu::Region_Nopassaing::Nopassaingregion
    return false if regions.any? {|r| r[0] == $game_map.region_id(x, y) &&
    (1..(r.size-1)).any? {|i| r == d}} && @through
    amu_20150606_passable_without_region?(x, y, d)
  end
end[/pre]

点评

_(:з」∠)_ 啊嘞,我没写日期吗…… 太久没写脚本alias都忘记加上日期了。我去加一下,谢TD触提醒。  发表于 2015-6-6 15:59
以后alias尽量别用这种名字,万一你自己撞了= =  发表于 2015-6-6 15:26
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部