赞 | 1 |
VIP | 246 |
好人卡 | 87 |
积分 | 1 |
经验 | 34142 |
最后登录 | 2015-1-15 |
在线时间 | 323 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 323 小时
- 注册时间
- 2010-8-21
- 帖子
- 666
|
1帧处理10多次...?先汗一下...就算这个脚本耗时0.01秒,1帧处理10多次,FPS可以掉到1位数(理论)....,
比起什么什么函数来说,查表是最快的(貌似查表也算函数,f(x)嘛!返回一个值),
我之所以把所有坐标列出来,就是为了查表,所以,这个脚本只运行1次就好了,
重要的相对坐标,因为不知道lz到底干什么,我现在假设lz是排列100个事件...脚本如下:- #==============================================================================
- # ■ Game_Map
- #------------------------------------------------------------------------------
- # 处理地图的类。包含卷动以及可以通行的判断功能。
- # 本类的实例请参考 $game_map 。
- #==============================================================================
- class Game_Map
- attr_reader :hash
- alias _setup setup #可以不写什么unless,因为 ||=
- def setup(map_id)
- _setup(map_id)
- @hash ||= make_hash
- end
- #--------------------------------------------------------------------------
- # ● 远近坐标...
- #--------------------------------------------------------------------------
- def make_hash(w=self.width, h=self.height)
- t = 0
- z=(-w..w).inject({}){|a,x|(-h..h).each{|y|k=x*x+y*y;a[k]||=[];a[k]<<[x,y]};a}
- @hash = z.keys.sort.inject({}){|a,i|z[i].each{|j|a[j]=t;t+=1};a}
- end
- #--------------------------------------------------------------------------
- # ● 事件排序
- #--------------------------------------------------------------------------
- def sort_events(e_id, x=$game_player)
- (e_id.inject([]){|a,i|a[@hash[[x.x-@events[i].x,x.y-@events[i].y]]]=i;a}).compact
- end
- end
复制代码 本人测试80*80地图,因为相对坐标原因会计算80*80*4个坐标出来,每次换地图计算一次,建议加入Loading画面,因为超过
100000个地图单位(314*315左右)会计算超过10秒(可能,没测试),
测试代码如下:- p $game_map.sort_events(1..100)
复制代码 不过严格来说应该是- p $game_map.sort_events((1..100).to_a, $game_player)
复制代码 是数组,而非范围,表示事件编号,100个事件耗时0.0秒(没法计算..太短了..)
所以,lz尝试用Hash查表吧! |
评分
-
查看全部评分
|