Project1

标题: 请问一张地图最好放多少个事件呢?? [打印本页]

作者: 化螺耕    时间: 2013-2-5 18:30
标题: 请问一张地图最好放多少个事件呢??
如题,我一张地图设置了48个事件(自动事件不多,基本上都是按决定键触发事件的),内存只有512MB的,觉得好卡,再设置事件的话会不会对CPU和内存有影响呢??
作者: 紫英晓狼1130    时间: 2013-2-5 18:35
事件可以编多一点,事件的多少对游戏的大小没太大影响。
作者: 水终结者    时间: 2013-2-5 18:42
本帖最后由 水终结者 于 2013-2-5 18:44 编辑

游戏执行中需要把地图以及地图上的事件调到内存中,Ruyb的执行效率本来就不高,事件就更慢了。自动执行事件与并行处理事件在游戏运行中很占内存。一个地图上放上一两个就会卡。

关于事件的调用是在这几个脚本中写的:

虽然分了7个来写,但是效率还是很低。

其实Ruby本来是处理文字的,但写起来方便,我想因此RGSS采用了Ruby吧。
作者: 水终结者    时间: 2013-2-5 18:43
紫英晓狼1130 发表于 2013-2-5 18:35
事件可以编多一点,事件的多少对游戏的大小没太大影响。

对,因为游戏进行中并不是一下把所有东西都调到内存中的。。
作者: wingzeroplus    时间: 2013-2-5 18:46
本帖最后由 wingzeroplus 于 2013-2-5 18:48 编辑

尽量少一点,地图上的事件不在乎执行条件,但是地图必须装载它。所以在不影响游戏的情况下越少越好
我记得我以前做游戏的时候做了立交桥(立交桥很大),交接口处弄了6(桥下的长度)*8排(2个口子)的事件=48,于是变成了一步一卡(因为以前也是老机子512M内存)
最后改为只放2*6个事件,通过判断主角与事件接触的方向,改变数据库内元件通行度,于是完全不卡,而且效果也不错
作者: c248611    时间: 2013-2-5 23:13
会有影响。
作者: 429259591    时间: 2013-2-5 23:31
我倒很好奇究竟是什么情况需要用到48个事件....
就我来说,一般是用一个事件来做主处理(如果太长的话请善用注释),其他的事件直接就是当作可移动图块或者独立的单一功能单位....
尽量用变量和开关来实现效果(预留几个变量当作局部变量?[每次进出地图都初始化])
作者: 梦翼无痕    时间: 2013-2-6 09:18
看你是不是自动执行了,全是自动执行当然会看,不过得看配置,如果是I7再配上8G内存,100个都是浮云·
作者: 化螺耕    时间: 2013-2-6 09:34
429259591 发表于 2013-2-5 23:31
我倒很好奇究竟是什么情况需要用到48个事件....
就我来说,一般是用一个事件来做主处理(如果太长的话请善 ...

………………我不是48个事件页,是建了48个事件在一张地图上(貌似有些是支线……),不过能教教我什么是局部变量吗。新手听不大懂的说
作者: 429259591    时间: 2013-2-6 09:42
化螺耕 发表于 2013-2-6 09:34
………………我不是48个事件页,是建了48个事件在一张地图上(貌似有些是支线……),不过能教教我什么是 ...

我说的的确是事件...不是事件页啊,捂面.....
局部变量这个其实很简单
它的效果便是,几乎每个地图都会用到它但又不会造成冲突...
具体做法好难解释......参考脚本中的局部变量概念.....

作者: 小学生    时间: 2013-2-6 09:52
只要别一张地图上放很多自动、并行事件就行。(玩《草泥马战记》的时候就这样卡了……)
作者: 化螺耕    时间: 2013-2-6 09:52
429259591 发表于 2013-2-6 09:42
我说的的确是事件...不是事件页啊,捂面.....
局部变量这个其实很简单
它的效果便是,几乎每个地图都会用 ...

好复杂。对了,可不可以用脚本来优化事件呢,在主站上找到的脚本用起来效果都好怪。比如这个
  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. class Game_Map
  12.   #--------------------------------------------------------------------------
  13.   def in_range?(object)
  14.     screne_x = $game_map.display_x
  15.     screne_x -= 256
  16.     screne_y = $game_map.display_y
  17.     screne_y -= 256
  18.     screne_width = $game_map.display_x
  19.     screne_width += 2816
  20.     screne_height = $game_map.display_y
  21.     screne_height += 2176
  22.     return false if object.real_x <= screne_x
  23.     return false if object.real_x >= screne_width
  24.     return false if object.real_y <= screne_y
  25.     return false if object.real_y >= screne_height
  26.     return true
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   def update
  30.     if $game_map.need_refresh
  31.       refresh
  32.     end
  33.     if @scroll_rest > 0
  34.       distance = 2 ** @scroll_speed
  35.       case @scroll_direction
  36.       when 2
  37.         scroll_down(distance)
  38.       when 4
  39.         scroll_left(distance)
  40.       when 6   
  41.         scroll_right(distance)
  42.       when 8   
  43.         scroll_up(distance)
  44.       end
  45.       @scroll_rest -= distance
  46.     end
  47.     for event in @events.values
  48.       if in_range?(event) or event.trigger == 3 or event.trigger == 4
  49.         event.update
  50.       end
  51.     end
  52.     for common_event in @common_events.values
  53.       common_event.update
  54.     end
  55.     @fog_ox -= @fog_sx / 8.0
  56.     @fog_oy -= @fog_sy / 8.0
  57.     if @fog_tone_duration >= 1
  58.       d = @fog_tone_duration
  59.       target = @fog_tone_target
  60.       @fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
  61.       @fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
  62.       @fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
  63.       @fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
  64.       @fog_tone_duration -= 1
  65.     end
  66.     if @fog_opacity_duration >= 1
  67.       d = @fog_opacity_duration
  68.       @fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
  69.       @fog_opacity_duration -= 1
  70.     end
  71.   end
  72. end
  73. #======================================
  74. # ■ Spriteset_Map
  75. #======================================
  76. class Spriteset_Map
  77.   #--------------------------------------------------------------------------
  78.   def in_range?(object)
  79.     screne_x = $game_map.display_x
  80.     screne_x -= 256
  81.     screne_y = $game_map.display_y
  82.     screne_y -= 256
  83.     screne_width = $game_map.display_x
  84.     screne_width += 2816
  85.     screne_height = $game_map.display_y
  86.     screne_height += 2176
  87.     return false if object.real_x <= screne_x
  88.     return false if object.real_x >= screne_width
  89.     return false if object.real_y <= screne_y
  90.     return false if object.real_y >= screne_height
  91.     return true
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   def update
  95.     if @panorama_name != $game_map.panorama_name or
  96.         @panorama_hue != $game_map.panorama_hue
  97.       @panorama_name = $game_map.panorama_name
  98.       @panorama_hue = $game_map.panorama_hue
  99.       if @panorama.bitmap != nil
  100.         @panorama.bitmap.dispose
  101.         @panorama.bitmap = nil
  102.       end
  103.       if @panorama_name != ""
  104.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  105.       end
  106.       Graphics.frame_reset
  107.     end
  108.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  109.       @fog_name = $game_map.fog_name
  110.       @fog_hue = $game_map.fog_hue
  111.       if @fog.bitmap != nil
  112.         @fog.bitmap.dispose
  113.         @fog.bitmap = nil
  114.       end
  115.       if @fog_name != ""
  116.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  117.       end
  118.       Graphics.frame_reset
  119.     end
  120.     @tilemap.ox = $game_map.display_x / 4
  121.     @tilemap.oy = $game_map.display_y / 4
  122.     @tilemap.update
  123.     @panorama.ox = $game_map.display_x / 8
  124.     @panorama.oy = $game_map.display_y / 8
  125.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  126.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  127.     @fog.opacity = $game_map.fog_opacity
  128.     @fog.blend_type = $game_map.fog_blend_type
  129.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  130.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  131.     @fog.tone = $game_map.fog_tone
  132.     i=0
  133.     for sprite in @character_sprites
  134.       if sprite.character.is_a?(Game_Event)
  135.         if in_range?(sprite.character) or sprite.character.trigger == 3 or sprite.character.trigger == 4
  136.           sprite.update
  137.           i+=1
  138.         end
  139.       else
  140.         sprite.update
  141.         i+=1
  142.       end
  143.     end
  144.     #p i
  145.     @weather.type = $game_screen.weather_type
  146.     @weather.max = $game_screen.weather_max
  147.     @weather.ox = $game_map.display_x / 4
  148.     @weather.oy = $game_map.display_y / 4
  149.     @weather.update
  150.     for sprite in @picture_sprites
  151.       sprite.update
  152.     end
  153.     @timer_sprite.update
  154.     @viewport1.tone = $game_screen.tone
  155.     @viewport1.ox = $game_screen.shake
  156.     @viewport3.color = $game_screen.flash_color
  157.     @viewport1.update
  158.     @viewport3.update
  159.   end
  160. end

复制代码
这个脚本用了之后是不会那么卡了,可是地图居然跟着人物在动啊,好怪啊(是不是我用了双远景有关系)
作者: 化螺耕    时间: 2013-2-6 18:26
…………我是地道的脚本盲一个啊,能不能哪位高手帮忙改一下呢??不胜感激




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1