查看: 3183|回复: 3

[已经解决] 怎样从一堆随机移动事件中取得某个事件的ID

[复制链接]
梦石
0
星屑
50
在线时间
66 小时
注册时间
2009-2-13
回帖
350
发表于 2010-9-19 21:21:10 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 38571240 于 2010-9-20 23:29 编辑

假设地图上有若干随机移动的事件,有什么好方法能尽量快捷地判断出某一时刻在X轴上距离主角最近的那个事件的ID?

无节操

梦石
0
星屑
608
在线时间
795 小时
注册时间
2009-2-6
回帖
3910

开拓者贵宾

发表于 2010-9-19 22:05:36 | 显示全部楼层
伪代码
for i in 0..20
  for j in 0..20
    k = $game_map.events[j].screen_x - $game_player.screen_x
    k = k > 0 ? k : -k
    if k == i
      return j
    end
  end
end

最老土的方法...绝对不要相信其效率.
顺便这是伪代码,不能直接用.

点评

效率的话你的方法也行啊,我想不可避免的要判断每一个事件。  发表于 2010-9-19 23:27
这个略显深奥了点吧,我看不懂啊...... 那么找出K的最小值的地方在哪儿?  发表于 2010-9-19 22:52
Brandnew day, Brandnew Life
                             规 实在  中
暂为素材区版主,版其  琢磨
应援一下~
RPG制作大师授权素材推广计划
回复

使用道具 举报

梦石
0
星屑
50
在线时间
66 小时
注册时间
2009-2-13
回帖
350
 楼主| 发表于 2010-9-19 23:12:44 | 显示全部楼层
不知道语法怎么写,但这样似乎可以取得

@E = []
for eventa in $game_map.events.values
  $k = eventa.x - $game_player.x
  $k = $k > 0 ? $k : -$k
  @E[eventa.id] = $k
  if @E.min == $k
     $game_variables[N] = eventa.id
  end
end

谢谢沙发的启发
回复

使用道具 举报

旅之愚者

梦石
0
星屑
560
在线时间
814 小时
注册时间
2007-7-28
回帖
2121

贵宾

发表于 2010-9-19 23:36:46 | 显示全部楼层
回复 38571240 的帖子

event = $game_map.events.values.sort_by{|e| (e.x - $game_player.x).abs}[0]
$game_variables[xxx] = event.id

点评

神语法啊~ 膜拜一下  发表于 2010-9-19 23:51

评分

参与人数 2星屑 +706 收起 理由
夕阳武士 + 700 认可答案
38571240 + 6

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部