查看: 6290|回复: 16

[已经解决] 设置了图块不可通行为什么还能跑上去

[复制链接]
梦石
0
星屑
60
在线时间
56 小时
注册时间
2012-12-23
回帖
58
发表于 2014-6-7 18:48:17 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 denitk 于 2014-6-7 20:37 编辑

QQ截图20140608184058.png
QQ截图20140608184037.png
如图所示,求解决办法

点评

你用的图块好像不是你下面贴图的那组诶。我在下面那张图里没找到这种墙  发表于 2014-6-7 19:01

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-6-7 18:57:28 | 显示全部楼层
很抱歉,我完全没看出来哪里出了问题

点评

他人走到了墙里去了。也就是设置了不能通行还是穿过去了  发表于 2014-6-7 18:59
回复

使用道具 举报

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-6-7 19:03:57 | 显示全部楼层
本帖最后由 VIPArcher 于 2014-6-7 19:05 编辑

解决方式1 事件堵
解决方式2 在B,C,D,E里的某个图块用透明的图块 设置为不可通行,用这个图块把不能走的地方堵上。(这里要绘制东西就用事件)
解决方式3, 用下面的这个脚本(不推荐)[pre lang="ruby" line="1"]#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
#  管理地图的类。拥有卷动地图以及判断通行度的功能。
#   本类的实例请参考 $game_map 。
#    添加内容:添加读取地图备注内容并更改一部分通行判定。alias:2个,新定义:2个
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # ● セットアップ
  #     map_id : マップ ID
  #     enable : 所属レイヤーの変更
  #--------------------------------------------------------------------------
  alias region_effect_setup setup
  def setup(map_id)
    @encountwalk_region = {}
    @passagechange_region = {}
    @canjump_region = {}
    @region_switch = {}
    @forcemove_region = {}
    @move_diag_region = {}
    region_effect_setup(map_id)
    @map.note.each_line{|line|
    case line
    when /\<(?:遇敌步数更改|ENCOUNTWALK_REGION)[ ]**(\d+)(?:\,(\d+))*\>/
      @encountwalk_region[$1.to_i] = $2 == nil ? 0 : $2.to_i
    when /\<(?:更改通行区域|PASSAGECHANGE_REGION)[ ]*(\d+)(?:\,(\d+))*\>/
      push_passage_region($1.to_i,$2)
    when /\<(?:可跳跃区域|JUMP_REGION)[ ]*(\d+)(?:\,([2468]+))*\>/
      push_jump_region($1.to_i,$2)
    when /\<(?:区域开关|REGION_SWITCH)[ ]*(\d+)(?:\,(\d+))*\>/
      @region_switch[$1.to_i] = $2.to_i
    when /\<(?:强制移动区域|FORCEMOVE_REGION)[ ]*(\d+)(?:\,([2468]+))*\>/
      @forcemove_region[$1.to_i] = $2.to_i
    when /\<(?:斜向移动|MOVE_DIAG)[ ]*(\d+)(?:\,([28]+))\>/
      @move_diag_region[$1.to_i] = $2.to_i
    end
    }
  end
  #--------------------------------------------------------------------------
  # ● 添加通行区域
  #--------------------------------------------------------------------------
  def push_passage_region(region_id,direction)
    directions = []
    if direction
      direction.scan(/./){|d|
      case d
      when /2/
        directions.push(0x0001)
      when /4/
        directions.push(0x0002)
      when /6/
        directions.push(0x0004)
      when /8/
        directions.push(0x0008)
      end
      }
    end
    @passagechange_region[region_id] = directions
  end
  #--------------------------------------------------------------------------
  # ● 添加跳跃区域
  #--------------------------------------------------------------------------
  def push_jump_region(region_id,direction)
    directions = []
    if direction
      direction.scan(/./){|d|
      case d
      when /2/
        directions.push(2)
      when /4/
        directions.push(4)
      when /6/
        directions.push(6)
      when /8/
        directions.push(8)
      end
      }
    else
      directions = [2,4,6,8]
    end
    @canjump_region[region_id] = directions
  end
  alias region_change_check_passage check_passage
  #--------------------------------------------------------------------------
  # ● 通行检查
  #     alias:添加区域通行判定
  #--------------------------------------------------------------------------
  def check_passage(x, y, bit)
    change = @passagechange_region[region_id(x,y)]
    return change.include?(bit) if change
    return region_change_check_passage(x,y,bit)
  end
  attr_reader :encountwalk_region
  attr_reader :canjump_region
  attr_reader :region_switch
  attr_reader :forcemove_region
  attr_reader :move_diag_region
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
#  处理玩家人物的类。拥有事件启动的判定、地图的卷动等功能。
#   本类的实例请参考 $game_player 。
#    添加内容:添加有关移动的处理内容。 alias:3个 新定义:3个
#==============================================================================

class Game_Player < Game_Character
  alias _Kine_no_encount_region_encounter_progress_value encounter_progress_value
  #--------------------------------------------------------------------------
  # ● 获取遇敌进行值
  #     alias:在结果添加区域遇敌值
  #--------------------------------------------------------------------------
  def encounter_progress_value
    value = _Kine_no_encount_region_encounter_progress_value
    v2 = $game_map.encountwalk_region[region_id]
    value = v2 if v2
    value
  end
  alias jump_move_by_input move_by_input
  #--------------------------------------------------------------------------
  # ● 由方向键移动
  #     alias:添加强制移动区域与跳跃处理
  #--------------------------------------------------------------------------
  def move_by_input
    @input_jump = false
    return if force_move_by_region
    jump_move_by_input
    unless @move_succeed
      jump_by_input(Input.dir4)
    end
  end
  #--------------------------------------------------------------------------
  # ● 由方向键跳跃
  #--------------------------------------------------------------------------
  def jump_by_input(d)
    return if d == 0
    x1 = $game_map.x_with_direction(@x,d)
    y1 = $game_map.y_with_direction(@y,d)
    x2 = $game_map.x_with_direction(x1,d)
    y2 = $game_map.y_with_direction(y1,d)
    if can_jump?(x1,x2,y1,y2,d)
      jump(x2 - @x,y2 - @y)
      @input_jump = true
      @move_succeed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 可以跳跃?
  #--------------------------------------------------------------------------
  def can_jump?(x1,x2,y1,y2,d)
    return false unless movable?
    return false unless [2,4,6,8].any?{|di| map_passable?(x2,y2,di)}
    return false if $game_map.canjump_region[$game_map.region_id(x1,y1)] == nil
    return false unless $game_map.canjump_region[$game_map.region_id(x1,y1)].include?(d)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 由区域强制移动
  #--------------------------------------------------------------------------
  def force_move_by_region
    return false if !movable? || $game_map.interpreter.running?
    if $game_map.forcemove_region.include?(region_id)
      move_straight($game_map.forcemove_region[region_id])
      return true
    end
    return false
  end
  alias region_switch_update update
  #--------------------------------------------------------------------------
  # ● 更新画面
  #     alias:添加区域开关控制内容
  #--------------------------------------------------------------------------
  def update
    last_region_id = region_id
    region_switch_update
    if last_region_id != region_id
      $game_map.region_switch.each{|k,v|
        $game_switches[v] = region_id == k
      }
    end
  end
end
#==============================================================================
# ■ Game_CharacterBase
#------------------------------------------------------------------------------
#  管理地图人物的基本类。是所有地图人物类的共通父类。拥有坐标、图片等基本信息。
#==============================================================================

class Game_CharacterBase
  #--------------------------------------------------------------------------
  # ● 径向移动
  #     d       : 方向(2,4,6,8)
  #     turn_ok : 是否可以改变方向
  #--------------------------------------------------------------------------
  alias move_diag_region_move_straight move_straight
  def move_straight(d, turn_ok = true)
    if $game_map.move_diag_region.keys.include?(region_id)
      if [4,6].include?(d)
        x2 = $game_map.round_x_with_direction(@x,d)
        d2 = $game_map.move_diag_region[region_id]
        [d2,10-d2].collect{|yd| $game_map.round_y_with_direction(@y,yd)}.each do |y2|
          if $game_map.region_id(x2,y2) == region_id
            vert = d
            horz = y2 - @y > 0 ? 2 : 8
            @through = true
            return move_diagonal(vert,horz).tap{|x| @through = false}.tap{|x| set_direction(d)}
          end
        end
      end
    end
    move_diag_region_move_straight(d,turn_ok)
  end
end[/pre]

点评

<更改通行区域 2 2468>在后面跟上的数字代表那个方向可通行,(前面那样=变成可完全通行)  发表于 2014-6-7 19:13
脚本用法,在地图的备注里备注<更改通行区域 2>数字为区域ID 这样区域ID为2的地方不可通行  发表于 2014-6-7 19:11
回复

使用道具 举报

梦石
0
星屑
60
在线时间
56 小时
注册时间
2012-12-23
回帖
58
 楼主| 发表于 2014-6-7 20:35:16 | 显示全部楼层
1.jpg
2.jpg

呃
找到个和别的图不同的地方
但是不知道是不是这个问题

点评

不是 刚开始不从那里也可以走上去 现在只能站在原地不能动了  发表于 2014-6-7 22:35
moy
“地图”,挂墙上那个喂。你难道不是走那上去的吗  发表于 2014-6-7 22:29
说清楚嘛...... 搞得现在又被我弄出新问题了 现在人物出来就走不动了.........-_-!!!  发表于 2014-6-7 22:27
moy
楼下说的东西具体点说就是那张地图  发表于 2014-6-7 22:21
回复

使用道具 举报

梦石
0
星屑
803
在线时间
2068 小时
注册时间
2011-10-3
回帖
1620
发表于 2014-6-7 20:49:24 | 显示全部楼层
你的“墙上地图”的通行度没设置X,墙上的一切东西,除非特定,一般都要设定为X的,否则就会走上去

点评

赞成  发表于 2016-6-13 15:54
回复

使用道具 举报

梦石
0
星屑
60
在线时间
56 小时
注册时间
2012-12-23
回帖
58
 楼主| 发表于 2014-6-7 20:51:52 | 显示全部楼层
QQ截图20140607205112.jpg

你是说这个里面的所有东西除非特定都要设置×?
回复

使用道具 举报

梦石
0
星屑
60
在线时间
56 小时
注册时间
2012-12-23
回帖
58
 楼主| 发表于 2014-6-7 20:53:29 | 显示全部楼层
QQ截图20140607205112.jpg
墙体里面已经全部是×了
难道是ACE本身的问题?
回复

使用道具 举报

梦石
0
星屑
803
在线时间
2068 小时
注册时间
2011-10-3
回帖
1620
发表于 2014-6-7 21:36:53 | 显示全部楼层
我说的是B~E里面的……你是不是先去把通行度的教程看一遍比较好?
回复

使用道具 举报

梦石
0
星屑
151
在线时间
208 小时
注册时间
2012-7-10
回帖
158
发表于 2014-6-7 21:58:20 | 显示全部楼层
你从哪穿上去的?不会是从沙发那里上去的吧……那个通行性也要检查下,新加入的图块,如果那个可通行的话,好像角色会有穿透属性
事件只会越用越熟,在用脚本前想想能否能用事件简便处理
回复

使用道具 举报

梦石
0
星屑
50
在线时间
132 小时
注册时间
2013-1-16
回帖
76
发表于 2014-6-7 22:04:40 | 显示全部楼层
工程发个,
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部