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

Project1

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

[通用发布] 【不是创意的创意】【通用】解决公共事件引起的地图拖沓

[复制链接]

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

跳转到指定楼层
1
发表于 2011-7-16 09:49:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 精灵使者 于 2015-11-13 11:59 编辑

来源:https://rpg.blue/forum.php?mod=viewthread&tid=31794
by Sailcat 两行脚本解决公共事件的地图拖沓
原理:
在地图中,每帧都会把所有的事件和公共事件刷新一次
但是对于公共事件来说,当其不执行时,只刷新条件
如果把那些永远也不会主动执行到的公共事件去掉,就会减少很多刷新
因为相信大家在做游戏的时候,不主动执行的公共事件是绝大多数
(有的时候只是因为一些多个场合都要调用的公用的功能,写在了公共事件里)
优化的目标是,在地图装载的时候,那些trigger为0的公共事件——即执行条件为“无”的公共事件,不会被装载到地图里,从而在刷新的时候也不会被列入刷新名单。
然后让我们来大量的编写王道的公共事件吧:)
====================================
精灵特意的写了VX版,和XP版一起,而且加入了脚本判断(感谢忧雪君)。
更新日志:
2011年7月16日 发布原始版本v1.0
脚本如下:
  1. #----------------------------------------------------------------------------
  2. #
  3. #   解决公共事件引起的地图拖沓 v 1.0(XP&VX)
  4. #   感谢忧雪君提供的版本判断
  5. #
  6. #----------------------------------------------------------------------------
  7. OS_VER = self ? :rv : :rx
  8. class Game_Map
  9.   if OS_VER == :rv
  10.   #--------------------------------------------------------------------------
  11.   # ● 设置事件
  12.   #--------------------------------------------------------------------------
  13.   def setup_events
  14.     @events = {}          # 地图事件
  15.     for i in @map.events.keys
  16.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  17.     end
  18.    #########################################################################
  19.     @common_events = {}   # 公共事件
  20.      for i in 1...$data_common_events.size
  21.       unless $data_common_events[i].trigger == 0
  22.       @common_events[i] = Game_CommonEvent.new(i)
  23.       end
  24.     end
  25.     #########################################################################
  26.   end
  27.   elsif OS_VER == :rx
  28.   #--------------------------------------------------------------------------
  29.   # ● 设置
  30.   #     map_id : 地图 ID
  31.   #--------------------------------------------------------------------------
  32.   def setup(map_id)
  33.     # 地图 ID 记录到 @map_id
  34.     @map_id = map_id
  35.     # 地图文件装载后、设置到 @map
  36.     @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  37.     # 定义实例变量设置地图元件信息
  38.     tileset = $data_tilesets[@map.tileset_id]
  39.     @tileset_name = tileset.tileset_name
  40.     @autotile_names = tileset.autotile_names
  41.     @panorama_name = tileset.panorama_name
  42.     @panorama_hue = tileset.panorama_hue
  43.     @fog_name = tileset.fog_name
  44.     @fog_hue = tileset.fog_hue
  45.     @fog_opacity = tileset.fog_opacity
  46.     @fog_blend_type = tileset.fog_blend_type
  47.     @fog_zoom = tileset.fog_zoom
  48.     @fog_sx = tileset.fog_sx
  49.     @fog_sy = tileset.fog_sy
  50.     @battleback_name = tileset.battleback_name
  51.     @passages = tileset.passages
  52.     @priorities = tileset.priorities
  53.     @terrain_tags = tileset.terrain_tags
  54.     # 初始化显示坐标
  55.     @display_x = 0
  56.     @display_y = 0
  57.     # 清除刷新要求标志
  58.     @need_refresh = false
  59.     # 设置地图事件数据
  60.     @events = {}
  61.     for i in @map.events.keys
  62.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  63.     end
  64.     ##############################################################
  65.     # 设置公共事件数据
  66.     @common_events = {}
  67.     for i in 1...$data_common_events.size
  68.      unless $data_common_events[i].trigger == 0
  69.        @common_events[i] = Game_CommonEvent.new(i)
  70.      end
  71.     end
  72.     ##############################################################
  73.     # 初始化雾的各种信息
  74.     @fog_ox = 0
  75.     @fog_oy = 0
  76.     @fog_tone = Tone.new(0, 0, 0, 0)
  77.     @fog_tone_target = Tone.new(0, 0, 0, 0)
  78.     @fog_tone_duration = 0
  79.     @fog_opacity_duration = 0
  80.     @fog_opacity_target = 0
  81.     # 初始化滚动信息
  82.     @scroll_direction = 2
  83.     @scroll_rest = 0
  84.     @scroll_speed = 4
  85.   end
  86.   end
  87. end
复制代码

点评

公共事件多了会不会造成卡机呢?我照顾不好就上百个公共事件  发表于 2011-7-16 19:06
你只是把O(n+K)变成了O(n)都是线性复杂度= =  发表于 2011-7-16 18:24

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

2
发表于 2011-7-16 14:36:54 | 只看该作者
其实没效果的恶

点评

应该仅仅是减少一些需要刷新的量罢了……  发表于 2011-7-16 14:46
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

宛若

梦石
0
星屑
1558
在线时间
526 小时
注册时间
2007-8-19
帖子
1493

极短24参与开拓者

3
发表于 2011-7-17 09:51:39 | 只看该作者
  1. t = Time.new
  2. 100000.times{if 1<2
  3. end}
  4. print Time.new - t #=>0.125
复制代码
[url=http://rpg.blue/thread-219730-1-1.html]http://unhero.sinaapp.com/wi.php[/url]
[color=Red]如你所见这是个死坑,没错这就是打我的脸用的[/color]
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

4
 楼主| 发表于 2012-2-3 15:07:54 | 只看该作者
经测试,VA会自动过滤不需要运行的公共事件,因此不需要加入此脚本。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-10 12:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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