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

Project1

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

公共事件里条件分歧太多导致速度很慢怎么办?

 关闭 [复制链接]

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
跳转到指定楼层
1
发表于 2008-1-15 17:41:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在战斗中调用的公共事件,条件分歧的层次比较多,一调用改事件游戏速度就很慢了,有什么解决方法?



版务信息:本贴由楼主自主结贴~
囡囚囨囚囨図囨囧

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
2
 楼主| 发表于 2008-1-15 17:41:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在战斗中调用的公共事件,条件分歧的层次比较多,一调用改事件游戏速度就很慢了,有什么解决方法?



版务信息:本贴由楼主自主结贴~
囡囚囨囚囨図囨囧

Lv1.梦旅人

忘记

梦石
0
星屑
55
在线时间
4 小时
注册时间
2007-12-15
帖子
3062
3
发表于 2008-1-15 17:46:10 | 只看该作者
防止事件多而卡机
可以用这个脚本{/hx}
  1. #======================================
  2. # ■ Anti Event Lag Script
  3. #======================================
  4. #  By: Near Fantastica
  5. #   Date: 12.06.05
  6. #   Version: 3
  7. #======================================

  8. #======================================
  9. # ■ Game_Map
  10. #======================================
  11. [url]http://rpg.blue/web/htm/news14.htm[/url]
  12. 也可以看看这个范例{/hx}
  13. class Game_Map
  14. #--------------------------------------------------------------------------
  15. def in_range?(object)
  16. screne_x = $game_map.display_x
  17. screne_x -= 256
  18. screne_y = $game_map.display_y
  19. screne_y -= 256
  20. screne_width = $game_map.display_x
  21. screne_width += 2816
  22. screne_height = $game_map.display_y
  23. screne_height += 2176
  24. return false if object.real_x <= screne_x
  25. return false if object.real_x >= screne_width
  26. return false if object.real_y <= screne_y
  27. return false if object.real_y >= screne_height
  28. return true
  29. end
  30. #--------------------------------------------------------------------------
  31. def update
  32. if $game_map.need_refresh
  33.    refresh
  34. end
  35. if @scroll_rest > 0
  36.    distance = 2 ** @scroll_speed
  37.    case @scroll_direction
  38.    when 2
  39.      scroll_down(distance)
  40.    when 4
  41.      scroll_left(distance)
  42.    when 6  
  43.      scroll_right(distance)
  44.    when 8  
  45.      scroll_up(distance)
  46.    end
  47.    @scroll_rest -= distance
  48. end
  49. for event in @events.values
  50.    if in_range?(event) or event.trigger == 3 or event.trigger == 4
  51.      event.update
  52.    end
  53. end
  54. for common_event in @common_events.values
  55.    common_event.update
  56. end
  57. @fog_ox -= @fog_sx / 8.0
  58. @fog_oy -= @fog_sy / 8.0
  59. if @fog_tone_duration >= 1
  60.    d = @fog_tone_duration
  61.    target = @fog_tone_target
  62.    @fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
  63.    @fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
  64.    @fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
  65.    @fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
  66.    @fog_tone_duration -= 1
  67. end
  68. if @fog_opacity_duration >= 1
  69.    d = @fog_opacity_duration
  70.    @fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
  71.    @fog_opacity_duration -= 1
  72. end
  73. end
  74. end

  75. #======================================
  76. # ■ Spriteset_Map
  77. #======================================

  78. class Spriteset_Map
  79. #--------------------------------------------------------------------------
  80. def in_range?(object)
  81. screne_x = $game_map.display_x
  82. screne_x -= 256
  83. screne_y = $game_map.display_y
  84. screne_y -= 256
  85. screne_width = $game_map.display_x
  86. screne_width += 2816
  87. screne_height = $game_map.display_y
  88. screne_height += 2176
  89. return false if object.real_x <= screne_x
  90. return false if object.real_x >= screne_width
  91. return false if object.real_y <= screne_y
  92. return false if object.real_y >= screne_height
  93. return true
  94. end
  95. #--------------------------------------------------------------------------
  96. def update
  97. if @panorama_name != $game_map.panorama_name or
  98.     @panorama_hue != $game_map.panorama_hue
  99.    @panorama_name = $game_map.panorama_name
  100.    @panorama_hue = $game_map.panorama_hue
  101.    if @panorama.bitmap != nil
  102.      @panorama.bitmap.dispose
  103.      @panorama.bitmap = nil
  104.    end
  105.    if @panorama_name != ""
  106.      @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  107.    end
  108.    Graphics.frame_reset
  109. end
  110. if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  111.    @fog_name = $game_map.fog_name
  112.    @fog_hue = $game_map.fog_hue
  113.    if @fog.bitmap != nil
  114.      @fog.bitmap.dispose
  115.      @fog.bitmap = nil
  116.    end
  117.    if @fog_name != ""
  118.      @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  119.    end
  120.    Graphics.frame_reset
  121. end
  122. @tilemap.ox = $game_map.display_x / 4
  123. @tilemap.oy = $game_map.display_y / 4
  124. @tilemap.update
  125. @panorama.ox = $game_map.display_x / 8
  126. @panorama.oy = $game_map.display_y / 8
  127. @fog.zoom_x = $game_map.fog_zoom / 100.0
  128. @fog.zoom_y = $game_map.fog_zoom / 100.0
  129. @fog.opacity = $game_map.fog_opacity
  130. @fog.blend_type = $game_map.fog_blend_type
  131. @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  132. @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  133. @fog.tone = $game_map.fog_tone
  134. i=0
  135. for sprite in @character_sprites
  136.    if sprite.character.is_a?(Game_Event)
  137.      if in_range?(sprite.character) or sprite.character.trigger == 3 or sprite.character.trigger == 4
  138.        sprite.update
  139.        i+=1
  140.      end
  141.    else
  142.      sprite.update
  143.      i+=1
  144.    end
  145. end
  146. #p i
  147. @weather.type = $game_screen.weather_type
  148. @weather.max = $game_screen.weather_max
  149. @weather.ox = $game_map.display_x / 4
  150. @weather.oy = $game_map.display_y / 4
  151. @weather.update
  152. for sprite in @picture_sprites
  153.    sprite.update
  154. end
  155. @timer_sprite.update
  156. @viewport1.tone = $game_screen.tone
  157. @viewport1.ox = $game_screen.shake
  158. @viewport3.color = $game_screen.flash_color
  159. @viewport1.update
  160. @viewport3.update
  161. end
  162. end
复制代码
因为你哭泣的时候有我想你你被人嘲笑时有我陪你在你感觉最无助的那一刻有个声音鼓励
<font color=#8600E9>忘记</font>
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

4
发表于 2008-1-15 17:47:54 | 只看该作者
楼主说的是战斗过程中调用公共事件吧。
http://rpg.blue/web/htm/news14.htm [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
5
 楼主| 发表于 2008-1-15 17:54:01 | 只看该作者
不是因为事件多而慢,是因为公共事件里条件分歧太多才慢的,平时也不慢,就是战斗中一调用该公共事件就很慢
囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

6
发表于 2008-1-15 17:55:47 | 只看该作者
我的那个帖子就是专门讲那个战斗中公共事件的lag的。你可以修改下看看。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

忘记

梦石
0
星屑
55
在线时间
4 小时
注册时间
2007-12-15
帖子
3062
7
发表于 2008-1-15 17:57:59 | 只看该作者
我贴出来LZ仔细看看吧
刚研究的。一般RMXP的战斗中使用公共事件都会比较卡,尤其是使用了战斗血槽或者自定义血槽、自定义头像的时候。如果测试模式,按F2,可以看到帧速率明显下降了。

解决方法:

1、Scene_Battle 1,234-238行:

        # 如果不是结束战斗回合的情况下
        if @phase != 5
          # 刷新状态窗口
          @status_window.refresh
        end

删了它!就是它造成很卡的。解释一句:这段的功能是刷新状态窗口,防止公共事件中我方减血后状态窗口没有更新出来。

2、不过这段又不能完全不要,否则我方用公共事件或遭到公共事件攻击的时候状态窗口会完全忘记刷新。所以把上面那段插到Scene_Battle 4的  def update_phase4_step6的比较靠下的敌方,变成如下:

  def update_phase4_step6
    # 清除强制行动对像的战斗者
    $game_temp.forcing_battler = nil
    # 公共事件 ID 有效的情况下
    if @common_event_id > 0
      # 设置事件
      common_event = $data_common_events[@common_event_id]
      $game_system.battle_interpreter.setup(common_event.list, 0)
    end
    # 如果不是结束战斗回合的情况下
    if @phase != 5
      # 刷新状态窗口
      @status_window.refresh
    end
    # 移至步骤 1
    @phase4_step = 1
  end

也就是说,公共事件执行结束后再刷新。这样把几百次刷新变为了1次,而效果相差很小。

经过测试,黑暗圣剑中的灵炮,在做此更改前后,帧速率由9提升至17。还不错。

其实有关优化的内容有很多,公共事件多了也会造成拖沓,这些倒是可以设法手动修改脚本减少拖沓。唯一比较恶心的是地图大了造成的拖沓无法挽回(因为那段代码没有公开在脚本中……)
因为你哭泣的时候有我想你你被人嘲笑时有我陪你在你感觉最无助的那一刻有个声音鼓励
<font color=#8600E9>忘记</font>
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
8
 楼主| 发表于 2008-1-15 18:07:59 | 只看该作者
以下引用精灵使者于2008-1-15 9:47:54的发言:
"楼主说的是战斗过程中调用公共事件吧。\r\nhttp://rpg.blue/web/htm/news14.htm";



是快了很多{/cy}
囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-27 12:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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