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

Project1

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

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

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2010-6-27
帖子
37
跳转到指定楼层
1
发表于 2010-7-14 13:46:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv2.观梦者

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

贵宾

2
发表于 2010-7-14 17:32:32 | 只看该作者
默认的系统下,似乎不行…只能全部遍历一遍~
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

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

贵宾

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

评分

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

查看全部评分

-.-
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 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 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
5
发表于 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 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-10 09:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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