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

平均时间占用空间
按坐标随机访问更新事件坐标
绝对相对绝对相对绝对相对
方法 1O(1)中等O(1)中等O(n)最小
方法 2O(1)最快O(1)最快O(w*h)最大
方法 3O(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