设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2641|回复: 1
打印 上一主题 下一主题

[原创发布] 八方向靠近主角/远离主角算法(附上小翅膀)

 关闭 [复制链接]

Lv1.梦旅人

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
帖子
787
跳转到指定楼层
1
发表于 2009-9-12 19:50:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
=.=为了弄支持纸娃娃的小翅膀,我特意写了八方向的算法。
  1.   #--------------------------------------------------------------------------
  2.   # ● 接近主角
  3.   #--------------------------------------------------------------------------
  4.   def move_toward_player
  5.     # 求得与主角的坐标差
  6.     sx = @x - $game_player.x
  7.     sy = @y - $game_player.y
  8.     # 坐标相等情况下
  9.     if sx == 0 and sy == 0
  10.       return
  11.     end
  12.     # 求得差的绝对值
  13.     abs_sx = sx.abs
  14.     abs_sy = sy.abs
  15.     # 横距离与纵距离相等的情况下
  16.     if abs_sx == abs_sy
  17.       #if sx > 0
  18.       # if sy > 0
  19.       # move_upper_left
  20.       # elsif sy < 0
  21.       # move_lower_left
  22.       # end
  23.      #elsif sx < 0
  24.      #  if sy > 0
  25.      #  move_upper_right
  26.      #elsif sy < 0
  27.      #  move_lower_right
  28.      #end
  29.      #end   
  30.      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
  31.     end
  32.     # 横侧距离长的情况下
  33.     if abs_sx > abs_sy
  34.       # 左右方向优先。向主角移动
  35.      # sx > 0 ? move_left : move_right
  36.       if sx > 0
  37.        if sy > 0
  38.        move_upper_left
  39.        elsif sy < 0
  40.        move_lower_left
  41.      else
  42.        move_left
  43.        end
  44.      else
  45.        if sy > 0
  46.        move_upper_right
  47.      elsif sy < 0
  48.        move_lower_right
  49.      else
  50.        move_right
  51.      end
  52.      end
  53.       if not moving? and sy != 0
  54.         sy > 0 ? move_up : move_down
  55.       end
  56.     # 竖侧距离长的情况下
  57.     else abs_sx < abs_sy
  58.       # 上下方向优先。向主角移动
  59.       #sy > 0 ? move_up : move_down
  60.       if sy > 0
  61.         if sx > 0
  62.           move_upper_left
  63.         elsif sx < 0
  64.           move_upper_right
  65.         else
  66.           move_up
  67.         end
  68.       else
  69.         if sx > 0
  70.        move_lower_left
  71.      elsif sx < 0
  72.        move_lower_right
  73.      else
  74.        move_down
  75.      end
  76.      end
  77.       if not moving? and sx != 0
  78.         sx > 0 ? move_left : move_right
  79.       end
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 远离主角
  84.   #--------------------------------------------------------------------------
  85.   def move_away_from_player
  86.     # 求得与主角的坐标差
  87.     sx = @x - $game_player.x
  88.     sy = @y - $game_player.y
  89.     # 坐标相等情况下
  90.     if sx == 0 and sy == 0
  91.       return
  92.     end
  93.     # 求得差的绝对值
  94.     abs_sx = sx.abs
  95.     abs_sy = sy.abs
  96.     # 横侧距离长的情况下
  97.     if abs_sx > abs_sy
  98.       # 左右方向优先。向主角移动
  99.      # sx > 0 ? move_left : move_right
  100.       if sx > 0
  101.        if sy > 0
  102.        move_lower_right
  103.        elsif sy < 0
  104.        move_upper_right
  105.      else
  106.        move_right
  107.        end
  108.      else
  109.        if sy > 0
  110.        move_lower_left
  111.      elsif sy < 0
  112.        move_upper_left
  113.      else
  114.        move_left
  115.      end
  116.      end
  117.       if not moving? and sy != 0
  118.         sy > 0 ? move_down : move_up
  119.       end
  120.     # 竖侧距离长的情况下
  121.     else abs_sx < abs_sy
  122.       # 上下方向优先。向主角移动
  123.       #sy > 0 ? move_up : move_down
  124.       if sy > 0
  125.         if sx > 0
  126.           move_lower_right
  127.         elsif sx < 0
  128.           move_lower_left
  129.         else
  130.           move_down
  131.         end
  132.       else
  133.         if sx > 0
  134.        move_upper_right
  135.      elsif sx < 0
  136.        move_upper_left
  137.      else
  138.        move_up
  139.      end
  140.      end
  141.       if not moving? and sx != 0
  142.         sx > 0 ? move_right : move_left
  143.       end
  144.     end
  145.   end
复制代码
附上工程: Project19.rar (356.28 KB, 下载次数: 303)
我爱66RPG,但我讨厌66.

Lv1.梦旅人

梦石
0
星屑
50
在线时间
34 小时
注册时间
2006-6-19
帖子
111
2
发表于 2009-9-12 20:57:20 | 只看该作者
支持!!其实对于美工来说这是最简单的合成一下,但脚本就完全不同了、大家好像灵活所为自己的专长努力着
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-15 04:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表