查看: 2643|回复: 4

[讨论] 有没有办法能从指定XY坐标中判断出事件ID

  [复制链接]
头像被屏蔽
梦石
0
星屑
50
在线时间
0 小时
注册时间
2010-6-27
回帖
31
发表于 2010-7-14 13:46:25 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
回帖
5038

贵宾

发表于 2010-7-14 17:32:32 | 显示全部楼层
默认的系统下,似乎不行…只能全部遍历一遍~
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
回帖
1260

贵宾

发表于 2010-7-14 19:14:15 | 显示全部楼层
{:nm_1:}你要知道。这个坐标可是动态的.
如果全部不会动的话可以建立一个表,
但是你全部都是动态的东西。
要么你就别用默认的队列了。
自己定过另一种数据结构吧。

评分

参与人数 1星屑 +240 收起 理由
「旅」 + 240 认可答案

查看全部评分

-.-
回复

使用道具 举报

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
回帖
1912
发表于 2010-7-15 11:37:29 | 显示全部楼层
你只能怪默认脚本设计模式不好,用事件 ID 作键散列事件对象,而不是以坐标
重写默认脚本的地图事件部分,并:
1、改为使用 (y 坐标*地图宽度+x 坐标) 为键散列事件对象,并且当事件移动后更新散列表元素,或
2、用二维数组静态保存事件对象,第一维是 X 坐标,第二维是 Y 坐标,事件移动后时更新二维数组数据,或
3、用四叉树保存二维场景中的事件,事件移动后更新节点位置

如果 n=事件数量,w=地图宽度(格子),h=地图高度(格子),n<=w*h

平均时间占用空间
按坐标随机访问更新事件坐标
绝对相对绝对相对绝对相对
方法 1O(1)中等O(1)中等O(n)最小
方法 2O(1)最快O(1)最快O(w*h)最大
方法 3O(log n)最慢O(log n)最慢O(n)中等

评分

参与人数 1星屑 +600 收起 理由
「旅」 + 600 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
回帖
137
发表于 2010-7-15 13:31:18 | 显示全部楼层
回复 kojoy 的帖子

第一:这个不一定用for i做,个人觉得用find更好
event.find{|e| e.x == x && e.y == y},这个会检测到第一个xy均满足条件的事件并返回,虽然效率跟for+break一样,但是语法比较优雅

第二:如果要用这种循环查找事件,最好同一地图上不要有太多事件,或者你在编辑地图的时候,事件id与x或y值存在正相关,这样的话,改进查找算法可以降低运算时间

第三:一个个人意见,对于少量的需要这样查找的事件,可以在事件页中加两句脚本将自身推入(push)一个新的数据结构(如数组或哈希)

评分

参与人数 1星屑 +400 收起 理由
「旅」 + 400 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部