| 
 
| 赞 | 5 |  
| VIP | 620 |  
| 好人卡 | 38 |  
| 积分 | 70 |  
| 经验 | 125468 |  
| 最后登录 | 2015-7-27 |  
| 在线时间 | 1666 小时 |  
 Lv4.逐梦者 
	梦石0 星屑6955 在线时间1666 小时注册时间2008-10-29帖子6710 
 | 
| 本帖最后由 后知后觉 于 2010-8-25 13:01 编辑 
 回复 512195574 的帖子
 
 
 更正一下.那一行应该是这样写
 一般来说.主角的移动速度是比怪物快的.复制代码if sx.abs > 7 or sy.abs > 7
怪物靠近的时候.迅速把主角远离怪物7格以外.
 怪物就不会追过来了.而是随机移动.
 至于怪物不能越过某个 界限.
 这个的制作思路目前没想好.
 就我见过的RM制作的游戏.其实一般都不会把野外和城镇放在同一个地图上.
 都是靠 场所移动 来连接的.
 地图事件正常情况下是不可能跨地图执行的.
 
 ==========================================================
 
 把下面这段放到脚本编辑器的 Main 脚本的上面...别的地方就不用改了...
 主角在远离怪物 7 格的时候. 怪物如果远离了自己的出生地 7 格的话就会向着出生地的方向移动.
 不过怪物不能越过某个界限还是没有做.这个你自己想办法吧.
 做了个范例.范例里还有你问的那个 计时器.自己对照下吧.
 
  Project2.rar
(187.08 KB, 下载次数: 29) 复制代码
#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Character
  #--------------------------------------------------------------------------
  # ● 移动类型 : 接近
  #--------------------------------------------------------------------------
  def move_type_toward_player
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    if sx.abs > 7 or sy.abs > 7
      sxs = @x - (@event.nil? ? $game_player.x : @event.x)
      sys = @y - (@event.nil? ? $game_player.y : @event.y)
      if sxs.abs > 7 or sys.abs > 7
        # 靠近自己的出生地
        move_toward_self_birthplace
        return
      end
      # 随机移动
      move_random
      return
    end
    case rand(6)
    when 0..3  # 接近主角
      move_toward_player
    when 4  # 随机
      move_random
    when 5  # 前进一步
      move_forward
    end
  end
  #--------------------------------------------------------------------------
  # ● 接近自己的出生地
  #--------------------------------------------------------------------------
  def move_toward_self_birthplace
    sx = @x - (@event.nil? ? $game_player.x : @event.x)
    sy = @y - (@event.nil? ? $game_player.y : @event.y)
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end
end
 | 
 |