Project1

标题: 【7VIP】 判断距离指定事件最近的某指定事件 的最简办法 [打印本页]

作者: 刺夜之枪    时间: 2012-2-24 21:08
标题: 【7VIP】 判断距离指定事件最近的某指定事件 的最简办法
RT
判断距离 指定事件最近的某指定事件 的最简办法


最好是脚本,越简单越好(效率比事件高嘛)


打个比方:   
在【事件2】【事件3】【事件4】【事件5】
判断距离【事件1】最近的那个事件的ID
就是这么简单,,,dsu_plus_rewardpost_czw
作者: Wind2010    时间: 2012-2-24 22:16
事先描绘好一个Table,xy里放着数字,而数字是某个数组的index,index中为一个数组,里面储存着当前位置的事件的ID
事件移动时修改一次Table,将原xy的数组中自身的ID删除,加入到新数组中
判断距离时从当前格的xy坐标+1-1的位置判断起,有事件ID则返回


上面的貌似很复杂,那么用XP自带的话:
分别获取地图上各个事件的xy坐标,求出和指定事件的绝对距离,找出最短的(.min)用.index来找到事件
作者: 刺夜之枪    时间: 2012-2-24 23:27
Wind2010 发表于 2012-2-24 22:16
事先描绘好一个Table,xy里放着数字,而数字是某个数组的index,index中为一个数组,里面储存着当前位置的 ...

分割线下面的表示可行,一开始就是这么想。
不过不太清楚怎么获得那个最小值的事件Id
作者: orzfly    时间: 2012-2-25 07:24
本帖最后由 orzfly 于 2012-2-25 08:41 编辑
  1. class Game_Map
  2.   def nearest(id)
  3.     id == 0 ? x, y = $game_player.x, $game_player.y : x, y = @events[id].x, @events[id].y
  4.     pos = @events.values.map{ |ev| ((ev.x - x) ** 2  加号 (ev.y - y) ** 2) * 10000  加号 ev.id }.sort
  5.     while !((p = pos.shift).nil?)
  6.       ev = p % 10000
  7.       return ev unless ev == id
  8.     end
  9.     return nil
  10.   end
  11. end
复制代码
手机党飘过。

$game_map.nearest(1)������
作者: 亿万星辰    时间: 2012-2-25 08:36
本帖最后由 亿万星辰 于 2012-2-25 16:51 编辑
  1. class Game_Player
  2.   def id
  3.     return 0
  4.   end
  5. end
  6. class Game_Map
  7.   def nearest(id)
  8.     if id == 0
  9.       ex, ey = $game_player.x, $game_player.y
  10.     else
  11.       ex, ey = $game_map.events[id].x, $game_map.events[id].y
  12.     end
  13.     return ([$game_player] + @events.values).sort{|a, b|((a.x-ex)**2+(a.y-ey)**2) - ((b.x-ex)**2+(b.y-ey)**2)}.collect{|item|item.id}
  14.   end
  15. end
复制代码
调用方法
$game_map.nearest(1) # 返回1号事件周围距离远近序列,元素首位为距离为0的,可能是自己,可能是重叠后的事件或角色,排列越靠后越远,无法反应出相同距离的情况。
$game_map.nearest(0) # 返回玩家角色周围的距离远近序列。




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