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

Project1

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

[已经解决] 【7VIP】 判断距离指定事件最近的某指定事件 的最简办法

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1759
在线时间
2524 小时
注册时间
2010-10-12
帖子
1454

开拓者

跳转到指定楼层
1
发表于 2012-2-24 21:08:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RT
判断距离 指定事件最近的某指定事件 的最简办法


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


打个比方:   
在【事件2】【事件3】【事件4】【事件5】
判断距离【事件1】最近的那个事件的ID
就是这么简单,,,

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2012-2-24 22:16:40 | 只看该作者
事先描绘好一个Table,xy里放着数字,而数字是某个数组的index,index中为一个数组,里面储存着当前位置的事件的ID
事件移动时修改一次Table,将原xy的数组中自身的ID删除,加入到新数组中
判断距离时从当前格的xy坐标+1-1的位置判断起,有事件ID则返回


上面的貌似很复杂,那么用XP自带的话:
分别获取地图上各个事件的xy坐标,求出和指定事件的绝对距离,找出最短的(.min)用.index来找到事件

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1759
在线时间
2524 小时
注册时间
2010-10-12
帖子
1454

开拓者

3
 楼主| 发表于 2012-2-24 23:27:59 | 只看该作者
Wind2010 发表于 2012-2-24 22:16
事先描绘好一个Table,xy里放着数字,而数字是某个数组的index,index中为一个数组,里面储存着当前位置的 ...

分割线下面的表示可行,一开始就是这么想。
不过不太清楚怎么获得那个最小值的事件Id

点评

Array.index() => 返回数组中第一个 ==val 的单元的位置。若没有与其相等的单元则返回 nil。 一般来说绝对值数组都是和事件ID一一对应的吧  发表于 2012-2-24 23:31

回复

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60819
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

4
发表于 2012-2-25 07:24:16 | 只看该作者
本帖最后由 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 07:27
未经任何测试  发表于 2012-2-25 07:27
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

5
发表于 2012-2-25 08:36:20 | 只看该作者
本帖最后由 亿万星辰 于 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) # 返回玩家角色周围的距离远近序列。

点评

更新了。  发表于 2012-2-25 16:52
如何 只 判断 3号4号事件距离1号事件那个近  发表于 2012-2-25 15:21
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-1 10:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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