Project1

标题: 【应求脚本】事件以某点为中心随机移动 [打印本页]

作者: 柳之一    时间: 2008-7-27 23:20
标题: 【应求脚本】事件以某点为中心随机移动
#==============================================================================
# ■ Game_Character
#------------------------------------------------------------------------------
# 事件以某点为中心,随机移动。 
# 080727 by 柳之一
# 使用方法:本脚本粘贴在main之上,Game_Character之下。
#           在事件的移动规则类型选择自定义
#           移动路线里面,用脚本写上:
#            move_type_toward(w,r)
#            w,r就是你设定的中心
#例如: move_type_toward(10,10)就是npc在10,10这个点附近移动,开始的时候你的
#       事件可以是任意位置,但是一定确保能走到,你要是走到不能移动的点,
#        我就不说什么了
#==============================================================================

class Game_Character
  
  #--------------------------------------------------------------------------
  # ● 移动类型 : 接近x,y这一点
  #--------------------------------------------------------------------------
  def move_type_toward(w,r)
    sx = @x - w
    sy = @y - r
    if sx.abs + sy.abs >= 20
      move_random
    else
      case rand(6)
      when 0..3;  move_toward(w,r)
      when 4;     move_random
      when 5;     move_forward
      end
    end
  end
  
  def move_toward(wx,wy)
    sx = distance_x_from(wx)
    sy = distance_y_from(wy)
    if sx != 0 or sy != 0
      if sx.abs > sy.abs                  # 如果横向距离长
        sx > 0 ? move_left : move_right   # 左右方向优先
        if @move_failed and sy != 0
          sy > 0 ? move_up : move_down
        end
      else                                # 如果纵向距离等长
        sy > 0 ? move_up : move_down      # 上下方向优先
        if @move_failed and sx != 0
          sx > 0 ? move_left : move_right
        end
      end
    end
  end
  #--------------------------------------------------------------------------  #--------------------------------------------------------------------------
  def distance_x_from(r)
    sx = @x - r
    if $game_map.loop_horizontal?         # 是否横向循环
      if sx.abs > $game_map.width / 2     # 绝对值是否大于地图的一半?
        sx -= $game_map.width             # 引用地图的宽度
      end
    end
    return sx
  end
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  def distance_y_from(w)
    sy = @y - w
    if $game_map.loop_vertical?           # 是否纵向循环
      if sy.abs > $game_map.height / 2    # 绝对值是否大于地图的一半?
        sy -= $game_map.height            # 引用地图的高度
      end
    end
    return sy
  end

end

作者: 火鸡三毛老大    时间: 2008-7-28 04:28
还不错……
好久没看到你出没了……
作者: 柳之一    时间: 2008-7-28 05:13
以下引用火鸡三毛老大于2008-7-27 20:28:18的发言:

还不错……
好久没看到你出没了……


一直忙着做网游呢,加上期末,比较忙的说{/gg}
作者: zh99998    时间: 2008-7-31 15:19
以下引用柳之一于2008-7-27 21:13:07的发言:
一直忙着做网游呢,加上期末,比较忙的说
你上面那位也在做网游{/bz}
作者: yaochaos    时间: 2008-8-3 16:26
XP里怎么实现呀……
作者: 御灵    时间: 2008-8-8 02:41
http://rpg.blue/web/htm/news1135.htm
vip+2




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