您的位置:玩一玩 > 游戏攻略 > 正文

魔兽世界蓝条卡顿怎么办 魔兽世界蓝条卡顿解决方法

2024-11-11 11:34:40来源:玩一玩游戏网编辑:Gushan

魔兽世界在近期更新后很多小伙伴们会出现蓝条卡顿的问题,这个卡顿其实是因为暴雪源码中的事件处理逻辑出现问题导致的,需要关闭公会新闻来解决,详细操作步骤请看正文。

魔兽世界蓝条卡顿怎么办 魔兽世界蓝条卡顿解决方法

魔兽世界蓝条卡顿解决方法如下:

众所周知的原因,不知道什么时候开始每次过蓝条之后都会卡好一会,这个卡顿需要关闭公会新闻来解决。

NGA的用户@老李三鹿李发现这是由于暴雪源码中的事件处理逻辑导致的,并给出了解决方案。

问题根源:

每次玩家过图时,公会界面都会调用QueryGuildNews()函数;

重新查询所有公会新闻,触发一连串的“GUILD_NEWS_UPDATE”事件。

魔兽世界蓝条卡顿怎么办 魔兽世界蓝条卡顿解决方法

事件触发分析:

事件触发次数与公会新闻量成正比,新闻量越大,触发次数越多。

测试显示,小型公会触发7次,大型公会触发2486次,每次过图额外触发800-2000次不等。

过图前:

魔兽世界蓝条卡顿怎么办 魔兽世界蓝条卡顿解决方法

过图后:

魔兽世界蓝条卡顿怎么办 魔兽世界蓝条卡顿解决方法

卡顿原因:

每次事件都会执行公会新闻更新,拉取所有数据并更新新闻列表,这是卡顿的主要来源。

魔兽世界蓝条卡顿怎么办 魔兽世界蓝条卡顿解决方法

在这里会拉取所有数据,然后更新新闻列表,这个self.ScrollBox:SetDataProvider(dataProvider);

会清除滚动列表 然后一条条重新添加,这个就是卡顿的主要来源了。

数据量估算:

以某公会为例,公会新闻里面一共有7400多条数据。

每次过图时,游戏会重复向公会新闻框体添加约600-1400万次数据。

魔兽世界蓝条卡顿怎么办 魔兽世界蓝条卡顿解决方法

解决方案:

@老李三鹿李编写了一段代码,替换原有公会新闻框体的事件处理器,限制最多处理一次公会新闻更新,多触发的更新会被延迟到1秒后一次性执行。

请将代码复制并粘贴到您的任意lua文件中。

代码实现:

local BLZCommunitiesGuildNewsFrame_OnEvent = CommunitiesGuildNewsFrame_OnEventlocal newsRequireUpdate, newsTimer

CommunitiesFrameGuildDetailsFrameNews:SetScript("OnEvent", function(frame, event)

if event == "GUILD_NEWS_UPDATE" then

if newsTimer then

newsRequireUpdate = true

else

BLZCommunitiesGuildNewsFrame_OnEvent(frame, event)

-- 1秒后, 如果还需要更新公会新闻, 再次更新

newsTimer = C_Timer.NewTimer(1, function()

if newsRequireUpdate then

BLZCommunitiesGuildNewsFrame_OnEvent(frame, event)

end

newsTimer = nil

end)

end

else

BLZCommunitiesGuildNewsFrame_OnEvent(frame, event)

end

end)

通过上述修改,玩家可以更加流畅地浏览公会新闻,同时减少了因频繁更新造成的资源浪费。

以上就是笔者整理的魔兽世界蓝条卡顿的相关内容了,更多游戏攻略请关注玩一玩游戏网。

本站发布此文仅为传递信息,不代表本站认同此观点或证实其描述

相关阅读