Project1

标题: 急急~~RMXP八方向行走遇到障碍物实现(下->左)行走问题 [打印本页]

作者: fyldgp    时间: 2014-5-17 17:19
标题: 急急~~RMXP八方向行走遇到障碍物实现(下->左)行走问题
RMXP八方向行走的功能已经学会,不过在遇到障碍物时会卡住,显得很笨拙。比如人物左边有障碍物(即左->下不能通行),但是沿着(下->左)的路径是可以通行的,请问如何实现这一功能?

我根据网上几位大神的答案尝试写了一下脚本但只是实现了下->左,实现不了左->下,这是为什么?

原来左下行走脚本:

  #--------------------------------------------------------------------------
  # ● 向左下移动
  #--------------------------------------------------------------------------
  def move_lower_left(turn_enabled = true,x=-1,y=1)
    turn_1
    # 没有固定面向的场合
    unless @direction_fix
      # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
      @direction = 1
    end
    # 下→左、左→下 的通道可以通行的情况下
    for i in 0 ... @move_speed
    if passable?(x,y,1)
      # 更新坐标
      @real_x += x
      @real_y += y
      # 增加步数
      increase_steps
    end
    end
  end


网上实现此功能的办法:


# 下→左、左→下 的通道可以通行的情况下
   if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) and
      (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
这样虽说是可以了,但是,也不能说一条走不通就不让动啊,所以还需要分别判定两个方向的路径:
   # 下→左、左→下 的通道可以通行的情况下
   if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) and
      (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
     # 更新坐标
     @x -= 1
     @y += 1
     # 增加步数
     increase_steps
   # 下→左能够通行的情况下
   elsif (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4))
     # 向下移动后向左移动
     move_down
     move_left
   # 左→下能够通行的情况下
   elsif (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
     # 向左移动后向下移动
     move_left
     move_down
   end




我自己综合了一下之后:


  def move_lower_left(turn_enabled = true,x=-1,y=1)
    turn_1
    # 没有固定面向的场合
    unless @direction_fix
      # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
      @direction = 1
    end
    for i in 0 ... @move_speed
    if passable?(x,y,1)
      # 更新坐标
       @real_x += x
       @real_y += y
       # 增加步数
       increase_steps
     # 左→下能够通行的情况下
     elsif (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
       # 向左移动后向下移动
       @real_x += x
       @real_y += y
       increase_steps
     # 下→左能够通行的情况下
     elsif (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4))
       # 向下移动后向左移动
       @real_y += y        
       @real_x += x
       increase_steps
     end
    end
  end


现在问题是左边遇到障碍物时,可以实现下->左,但是下边遇到障碍物时,却不能实现左->下,请问这是为什么?怎么修改才能解决?
作者: yagami    时间: 2014-5-17 23:20
http://www.cnblogs.com/technology/archive/2011/05/26/2058842.html
作者: 7408    时间: 2014-5-18 17:01
请参考:https://rpg.blue/thread-320265-1-1.html




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