Project1
标题:
有没有办法能从指定XY坐标中判断出事件ID
[打印本页]
作者:
kojoy
时间:
2010-7-14 13:46
提示:
作者被禁止或删除 内容自动屏蔽
作者:
亿万星辰
时间:
2010-7-14 17:32
默认的系统下,似乎不行…只能全部遍历一遍~
作者:
神思
时间:
2010-7-14 19:14
{:nm_1:}你要知道。这个坐标可是动态的.
如果全部不会动的话可以建立一个表,
但是你全部都是动态的东西。
要么你就别用默认的队列了。
自己定过另一种数据结构吧。
作者:
紫苏
时间:
2010-7-15 11:37
你只能怪默认脚本设计模式不好,用事件 ID 作键散列事件对象,而不是以坐标
重写默认脚本的地图事件部分,并:
1、改为使用 (y 坐标*地图宽度+x 坐标) 为键散列事件对象,并且当事件移动后更新散列表元素,或
2、用二维数组静态保存事件对象,第一维是 X 坐标,第二维是 Y 坐标,事件移动后时更新二维数组数据,或
3、用四叉树保存二维场景中的事件,事件移动后更新节点位置
如果 n=事件数量,w=地图宽度(格子),h=地图高度(格子),n<=w*h
平均时间
占用空间
按坐标随机访问
更新事件坐标
绝对
相对
绝对
相对
绝对
相对
方法 1
O(1)
中等
O(1)
中等
O(n)
最小
方法 2
O(1)
最快
O(1)
最快
O(w*h)
最大
方法 3
O(log n)
最慢
O(log n)
最慢
O(n)
中等
作者:
darkdrium
时间:
2010-7-15 13:31
回复
kojoy
的帖子
第一:这个不一定用for i做,个人觉得用find更好
event.find{|e| e.x == x && e.y == y},这个会检测到第一个xy均满足条件的事件并返回,虽然效率跟for+break一样,但是语法比较优雅
第二:如果要用这种循环查找事件,最好同一地图上不要有太多事件,或者你在编辑地图的时候,事件id与x或y值存在正相关,这样的话,改进查找算法可以降低运算时间
第三:一个个人意见,对于少量的需要这样查找的事件,可以在事件页中加两句脚本将自身推入(push)一个新的数据结构(如数组或哈希)
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1