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 编辑
class Game_Map
def nearest(id)
id == 0 ? x, y = $game_player.x, $game_player.y : x, y = @events[id].x, @events[id].y
pos = @events.values.map{ |ev| ((ev.x - x) ** 2 加号 (ev.y - y) ** 2) * 10000 加号 ev.id }.sort
while !((p = pos.shift).nil?)
ev = p % 10000
return ev unless ev == id
end
return nil
end
end
复制代码
手机党飘过。
$game_map.nearest(1)������
作者:
亿万星辰
时间:
2012-2-25 08:36
本帖最后由 亿万星辰 于 2012-2-25 16:51 编辑
class Game_Player
def id
return 0
end
end
class Game_Map
def nearest(id)
if id == 0
ex, ey = $game_player.x, $game_player.y
else
ex, ey = $game_map.events[id].x, $game_map.events[id].y
end
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}
end
end
复制代码
调用方法
$game_map.nearest(1) # 返回1号事件周围距离远近序列,元素首位为距离为0的,可能是自己,可能是重叠后的事件或角色,排列越靠后越远,无法反应出相同距离的情况。
$game_map.nearest(0) # 返回玩家角色周围的距离远近序列。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1