Project1

标题: 如何判断在某几个事件中离本事件最近的事件是那个? [打印本页]

作者: 玛尔斯    时间: 2010-6-28 09:30
标题: 如何判断在某几个事件中离本事件最近的事件是那个?

作者: zhangbanxian    时间: 2010-6-28 09:30
本帖最后由 zhangbanxian 于 2010-6-28 10:25 编辑

先在脚本里插
  1. class Game_Map
  2.   attr_reader   :map
  3. end
复制代码
让地图能读取,然后事件里放脚本
  1. $game_variables[2] = 10000000
  2. @s = 0
  3. for i in $game_map.map.events.keys
  4. next if [2].include?(i) #不要判断的事件id
  5. a = $game_map.map.events[i].x - $game_player.x
  6. b = $game_map.map.events[i].y - $game_player.y
  7. @s = Math.sqrt(a*a+b*b)
  8. if @s < $game_variables[2]
  9. $game_variables[1] = i
  10. $game_variables[2] = @s
  11. end
  12. end
复制代码
最后由1号变量算出最近事件id,2号变量算出距离(- -b怎么像在做数学题目...)
作者: 越前リョーマ    时间: 2010-6-28 09:36
你把它们的坐标代入变量,然后把主角的也代入,算出水平和垂直距离,然后直接或者用勾股定理算出距离,就知道哪个最近了  = =
作者: 「旅」    时间: 2010-6-28 09:49
补充一句:距离的平方就可以了,貌似RM开方很麻烦。
作者: 玛尔斯    时间: 2010-6-28 10:47
来个更简单的。。。。。看不懂
作者: zhangbanxian    时间: 2010-6-28 11:00
回复 玛尔斯 的帖子
这个是两点间距离公式,你不理解的话也没有其他办法了,只有去翻翻数学教材了
(- -b话说你可以直接复制)


   
作者: 逸豫    时间: 2010-6-28 11:05
  1. class Interpreter
  2.   def find_nearest_event(x,y)
  3.     max = $game_map.events[1]
  4.     for id in 1..$game_map.events.size
  5.       i = $game_map.events[id]
  6.       distance1 = (i.x - x).abs ** 2 + (i.y - y).abs ** 2
  7.       distance2 = (max.x - x).abs ** 2 + (max.y - y).abs ** 2
  8.       if distance1 < distance2 && i.name[0,2] == "dt"
  9.         max = i
  10.       end
  11.     end
  12.     return max.id
  13.   end
  14. end
复制代码
事件 脚本 find_nearest_event(x,y),本事件的坐标表示方法为:
$game_map[@event_id].x,$game_map[@event_id].y
此方法会返回事件id
需要计算距离的事件名称请用dt开头
作者: tsy0302    时间: 2010-6-28 13:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tsar_NicholasII    时间: 2018-6-9 14:22
自己数格子呗




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