|
这个扯一个话题,就一个特别小的细节性问题,关于act的,就一点。框架判断的which标签
过多的which判断会导致exe算力不够导致卡顿的问题。
[WHICH]\n[SUMMON MASTER]代表获取父类,
[WHICH]\n[PASSIVE]代表扫描遍历全局的特效
[WHICH]\n[MONSTER]代表扫描遍历全局的怪物
然后以下就是能which到的所有种类。
[WHICH] [ME]// 자신
[SUMMON MASTER]// 소환주
[SUMMON OBJECT]// 소환한 놈(패시브, 몬스터)
[TARGET]// AI 상에서 잡고 있는 타겟.
[LAST ATTACKER]// 자신을 공격한 마지막 공격자
[LAST ACTIVE ATTACKER]// 자신을 공격한 마지막 공격자(액티브 오브젝트)
[LAST ATTACKSUCCESS]// 자신이 마지막으로 데미지를 준 오브젝트
[LAST ATTACKSUCCESSES]// 자신이 마지막으로 데미지를 준 오브젝트들
[LAST ACTIVE ATTACKSUCCESS]// 자신이 마지막으로 데미지를 준 ACTIVE 오브젝트
//mkjung 120515 add.
[CHARACTER ATTACKSUCCESS]// 마지막으로 공격성공한 캐릭터
[LAST ATTACKERS] 1000 0// 자신을 몇초 이내로 공격한 공격자들 첫번째 인자는 시간, 두번째 인자는 0 일때는 공격자 1일때는 액티브 오브젝트를 가져온다.
[ALL OUR TEAM] // 우리팀
[ALL ENEMY]// 우리팀 빼고 다
[ALL MONSTER TEAM]// 몬스터팀
[ALL CHARACTER TEAM]// 캐릭터팀
[CHARACTER]// 모든 캐릭터
[MONSTER]// 모든 몬스터
//mkjung 120514 modi.
[PASSIVE]// 모든 패시브 오브젝트
[AI CHARACTER]// 모든 AI 캐릭터
[CREATE OBJECT]// 생성되는 오브젝트 // ON CREATE OBJECT에서만 사용.
[DESTROY OBJECT] // 파괴되는 오브젝트 // ON DESTROY OBJECT에서만 사용
[LOAD TARGET] 0 // 저장한 오브젝트를 불러내서 사용. 0번은 저장할때 사용한 인덱스.
[PARTY TARGET]// 특정 파티원 선택
[INDEX] 0// [INDEX]: 파티원의 인덱스(0 ~ 3) (필수 인자)
[CHECK NEXT] 1// [CHECK NEXT]: 없을 경우 다음자리의 캐릭터를 타겟으로 할지 1이면 변경, 0이면 변경 안함 (인자 생략 가능)
[INCLUDE DEAD] 1// [INCLUDE DEAD]: 죽은 파티원도 체크할지 여부 1이면 체크, 0이면 체크 안함 (인자 생략 가능)
[/PARTY TARGET]
[PLAYER] // 모든 캐릭터 (AI 캐릭터는 제외한 실제 파티원들)
然后我这里提起一个怪物,当前110版本的白色大地的boss路西法。他有一个大技能,是全屏生成特效烟雾,然后自身生成金色魔法球。
魔法球最开始是默认跟随路西法的。当有玩家接近了路西法后,球会自动跟随该玩家。玩家需要带着球满地图的跑,找到金色魔法阵,
带着球的玩家可以拨开黑漆漆的迷雾。靠近金色魔法阵后,魔法阵会跟随玩家,
玩家然后把这两个带着一起撞boss即可达成1次短暂破防(25%的增伤属性)连续撞击三次后会有连续15秒的25%增伤属性的破防状态。
然后开始迷雾生成机制是,当boss触发这个大技能机制后,会有两个空特效在两个特定坐标(一个地图左边,一个地图右边),两个空特效会绕着自己进行旋转
周期50毫秒一转,在2000毫秒内旋转对的半径会从最初开始的0扩大到1000。在旋转的过程中空特效会检测自己距离50以内是否有迷雾,如果没有就新建迷雾。
所以这样就能实现全图迷雾覆盖。当新建完成后,全图大概有50~80个迷雾特效obj
然后boss自己生成金色魔法球,同时生成金色魔法阵,金色魔法阵会自动传送到距离路西法400px以外的地方,同时是被迷雾强制覆盖的。
然后所有的迷雾会开始which,去扫描特效找到这个金色魔法球,如果金色魔法球距离自己近了,就切换到没有任何图像的act,在切换到没有任何图像的act后
会再次扫描特效找这个金色魔法球,距离远了就切换回有图像的act,也就是说,一个迷雾无论是否有没有图像,都会参与到金色魔法球的扫描。
然后你会发现一个问题,一个迷雾带有了一个which扫描,全图扫描(了解nut的应该知道OjbectManager扫描吧),然后同时50~80个迷雾特效,而且act的扫描机制
等同于特效的onProc,就相当于proc里直接写了个manager扫描,然后还是50~80个特效的扫描(根据及其远古版本的act底层逻辑,甚至act自带的扫描机制可能还比
nut里的manager更占算力。)
在同一时间内,
客户端一次会承受了接近50~80次的ObjectManager扫描,这种情况直到所有迷雾全部消失后才会没有扫描。属于是直接把客户端算力吃了个一干二净。
这种情况下,只要不出现快速的打击和频繁新建特效这种操作,大约会吃掉40fps,但是一旦是出现了新建特效和打击操作,帧数会疯狂下坠直接掉到个位帧数
(1帧能玩,2帧流畅,3帧起飞)
换个召唤师这种召唤兽不可控的情况下,boss开机制直接1帧起飞。
优化的思路就是在于迷雾的全局扫描改动,不要让他直接在act里没有任何限制无脑的进行which,而是给他带上限定,比如特定帧数进行扫描,每隔100毫秒进行
一次扫描,经过改动后就可以修复这种因算力不够导致的帧数巨量降低问题。(官方的[CHECK TIME]\n毫秒数 其实就是每隔特定时间执行操作,不过台服有bug用不了,具体视频可以看看我超时空怎么写的)
然后根据这个修复思路也修复和黑鸦之境的地板娘和流放者的K的部分机制算法问题。不会再出现因为算力问题导致的帧数急剧降低问题。
翟墨尔的上下左右格子移动机制就是,用abcd特效分别表示了上下左右移动的格子。
当玩家距离abcd任意一个格子50px以内同时z轴小于10后玩家不为控制状态下
(所以为啥有些职业比如魔道和龙骑士能无视机制直接飞过去)
新建e特效并且跟随该玩家,
e特效会抓取自己的跟随对象使其反跟随,然后abcd会同时检测,
如果e距离a近了,使e向上移动,同理,距离b近了e往下移动,
即可完成,如果移动路径到红色地方会强制把e抛物线运动到最右边,到达后删除e,玩家自动解除控制。
地板娘的每个方格子都会对其他特效和玩家进行扫描,流放者的K也有特效会对特效进行扫描的这种问题。
K在结束了第一段连线机制后会生成6个圈圈,当玩家不在圈圈内,会疯狂扣血,实现就是
每隔500毫秒对站了地面的玩家生成特效,特效会攻击玩家。当然6个圈圈会实时扫描
那个攻击特效,如果距离近了就删除,就能简单实现这种效果。
还有青面修罗洛兹贝伦在被控情况下会大面积扫描对象生成一堆眼睛特效时造成的算力卡顿问题 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|