Project1

标题: 关于并行公共事件与多状态对电脑性能的影响。 [打印本页]

作者: jianyulei    时间: 2015-5-1 17:48
标题: 关于并行公共事件与多状态对电脑性能的影响。
最近在做物品拾取后会自动刷新的事件,最开始是想着并行公共事件来逐秒计算然后给变量逐渐赋值,最终达到指定变量时就刷新开关,但后来想到如果自动刷新的物品有好几十个甚至上百个,那么公共事件这样每秒都计算一次变量赋值然后再来判断所有开关是否达标或许会十分卡?
后来我想了另一个办法:物品拾取后获得一个除了持续时间外完全空白的状态,然后再配合地图并行事件以及开关就能完成,这样不知道会不会比上一种方法在性能方面更有效率?还有就是请问下状态最多可以叠加多少个?几十个上百个附加到一个人身上没问题吗?会不会在战斗的时候变卡?


作者: taroxd    时间: 2015-5-1 18:08
本帖最后由 taroxd 于 2015-5-1 18:11 编辑

只是每秒(而不是每帧)判断是否需要刷新,效率应该不会有太大问题。
效率还不够就每2秒,每3秒……延长判断的间隔对玩家体验的影响不大的。

上百个物品的话,每帧判断一个物品也可以。这样的话每几秒就能遍历所有物品了。

状态太多对效率的影响不大。
作者: zhaoxun96    时间: 2015-5-1 19:19
多内容的并行事件对电脑性能确实有很大影响.(主要是占用内存),我的多并行加多个地图事件直接把同学的2G内存电脑击毁了(4G内存的倒是没出过问题)
上百状态等我到家测试,但是从状态的运行机制来看可能还是会对战斗流畅度产生很大影响.....
作者: zhaoxun96    时间: 2015-5-1 20:17
其实想了想 楼主的要求还是并行事件的好
直接新建一个公共并行 变量A+1
条件分歧,当变量A=N时 开关A开启
测试了下并不会卡
100状态多麻烦.....
作者: zhaoxun96    时间: 2015-5-1 20:53
楼主这个问题我仔细想了想,如果即时的分歧会卡的话,楼主你觉得定时的判定一次,也就是说只做一个数时间的并行,到时间后执行判定公共事件如何?
作者: 三途亚梦    时间: 2015-5-1 20:56
要说实话的话,我觉得这个写一个小脚本效益会高很多……
当然得看楼主你怎么定义什么时候刷新,理想效果是怎样的。
作者: zhaoxun96    时间: 2015-5-1 20:59
三途亚梦 发表于 2015-5-1 20:56
要说实话的话,我觉得这个写一个小脚本效益会高很多……
当然得看楼主你怎么定义什么时候刷新,理 ...

我也这么觉得,但是不会写2333
作者: 三途亚梦    时间: 2015-5-2 00:55
本帖最后由 三途亚梦 于 2015-5-2 00:59 编辑

既然这样的话,你可以粗略的这么理解。
并行事件是每2帧执行一次,也就是一秒会执行30次。
每次执行中如果内容只有计算(即变量加减,开关操作等等)整个计算会在一瞬间被完成,你可以认为只要计算内容不太长不会计算到下一帧才会完成。
这个过程就像是你得到一份带有封面的假期作业,你需要打开封面,然后把题做完,再合上作业本,最后把作业交上去。
无论这个作业是一道题还是很多题,你都需要经过 打开封面-计算-合上作业本-上交。
这个意思就是,如果有两个并行事件,则电脑在解释的过程中也需要“打开两次封面”,当然对于电脑而言,“打开封面”是一件很麻烦的事情。
那么数量一多,可能就使得把全部的作业做完需要花费超过1帧或2帧的时间,但是没有立刻完成的基础上,又接到了新的作业。
电脑可没聪明到你不告诉它“这套作业你做过了,所以不用做了”它就会自己想“这套作业我做过了,跳过,做下一道。”
所以即使是完全一样的内容电脑都一定会再计算一遍,积累一多,处理不过来,这就形成顿卡了。
这么说大概就能理解到并行事件的个数越少越好的意思了吧。
※ 并行事件在地图外是不运行的。

那么就像TD触说的,如果你只是“每秒”而不是“每帧”进行计算是不会产生多大的负担的。
另外,如果你是单纯想做资源刷新的话,个人是建议采用牧场物语的形式,也就是“定时间点统一刷新”。
作者: jianyulei    时间: 2015-5-2 11:19
三途亚梦 发表于 2015-5-2 00:55
既然这样的话,你可以粗略的这么理解。
并行事件是每2帧执行一次,也就是一秒会执行30次。
每次执 ...

啊我明白了,也就是劲量并行一个事件,而里面塞多少都行把,反正刷新资源的也就是等待帧、判断分歧、赋予变量、打开开关,只要这些是一瞬间完成那么放多少个都没问题了。我只要把等待帧做成300帧判断一次,那么计算压力也不会有多大了
作者: tan12345    时间: 2015-5-3 21:50
不知道这样行不行:
在一张地图中,有事件1、事件2、事件3……事件x,其中,事件1到事件10是你需要的拾取刷新的事件,我们把这类事件设定成事件独立开关A打开时代表可拾取,关闭时代表不可拾取
然后呢,事件x作为并行事件,事件内容就是,一定时间过后,打开事件1到事件10的独立开关A,这样,1张地图就1个并行事件,应该不影响了吧




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