Project1

标题: 问一下并行事件对速度的影响 [打印本页]

作者: 乱摸阿弥陀佛    时间: 2009-5-11 19:06
标题: 问一下并行事件对速度的影响
有十个并行处理事件,每个事件里各有几个变量操作和条件分歧判断,如果把这十个并行处理事件里所有的内容全部合在一个并行事件里,游戏运行速度会变快一些,还是差不多? [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 紫苏    时间: 2009-5-11 20:43
一些个人意见,仅供参考~
当你分的事件太多时,速度是比不上一个整合事件的,才十个的话,在主流机器上应该没有什么差别~

有兴趣的话,可以考虑下整个事件的程序流程:
在 Scene_Map 的 update 中每帧(Graphics.update 调用一次为一帧)都会调用 Game_Map 的 update:
$game_map.update
而在 Game_Map 的 update 中每帧又会遍历地图上的所有事件,并调用该 Game_Event 对象的 update:
    # 更新地图事件
    for event in @events.values
      event.update
    end
而在 Game_Event 的 update 中又会判断本事件是否并行处理,是的话则会每帧调用为本并行事件专门分配的解释器的 update:
      # 更新解释器
      @interpreter.update
而在解释器的 update 中,就会执行当前解释到的那一行事件命令,解释完毕后将索引推进 1,等待下次解释器的 update 被调用,才继续执行事件接下来的命令

也就是说,一帧之间每个并行事件都执行一行命令~假设你有十个并行事件,第一行都是条件分歧,这样的话游戏在一帧之间就会进行十次判断,分别执行十个不同的事件解释器的一行;当把多个并行事件整合到一个事件时,一帧之间就只会刷新仅有的那一个事件解释器的那一行判断……

从这点就不难看出这只是解释器在一帧之间刷新耗时间隔多少的问题:十个并行事件的解释器的总刷新时间较长,那么在事件刷新前后的间隔运算时间就较长,角色的移动、画面、键盘输入等就会等待较长的间隔后才刷新;而如果只有一个并行事件,每刷新一帧仅仅进行一次条件分歧的判断,那么角色的移动、画面、键盘输入等其它刷新项就能更频繁地得到刷新~但反过来想,一个整合的并行事件中有很多条件分歧,但一帧只判断一次,显然并行事件本身的刷新速度就变慢了……

如果这里说的间隔很长,那么画面就要隔很长一段时间才会得到刷新,于是玩家感到画面滞留,帧数降低,速度慢了……所以当地图中有很多需要同时刷新(不是说事件的图形,而是有需要执行的内容)的事件的话,那么间隔就会很大,速度自然也就会变慢了~

其实有时不一定要执着于速度的最优化——如果从制作者的角度想,一个复杂的逻辑的并行处理应该尽量分解成不同的模块(事件),便于制作者的修改和调试(超凡大脑者除外);如果想最优化游戏的空间占用,那么应该尽量把东西都写到一个并行事件中——十个并行事件需要执行的内容数据大小 = 一个整合并行事件的内容数据大小,但一个并行事件就要在内存中多分配一个 Game_Event 对象 + 一个 Interpreter 对象,地图上的事件对象数组的容量也会动态地增加,这样一来对象的成员就会占用了不少空间 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 新月の道化师    时间: 2009-5-11 20:45
应该会快一点,因为每帧所有公共事件都会刷新一遍判断是什么类型的,所以理论上公共事件与消耗资源应该是正比关系。不过应该也快不到哪去吧
[LINE]1,#dddddd[/LINE]
发帖时米看到LS的回帖于是重复了,残念
作者: 浪人阿甘佐    时间: 2009-5-11 20:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: 乱摸阿弥陀佛    时间: 2009-5-11 20:59
感谢那么详细回答




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