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

魔獸世界藍(lán)條卡頓怎么辦 魔獸世界藍(lán)條卡頓解決方法

2024-11-11 11:34:40來源:玩一玩游戲網(wǎng)編輯:Gushan

魔獸世界在近期更新后很多小伙伴們會出現(xiàn)藍(lán)條卡頓的問題,這個卡頓其實是因為暴雪源碼中的事件處理邏輯出現(xiàn)問題導(dǎo)致的,需要關(guān)閉公會新聞來解決,詳細(xì)操作步驟請看正文。

魔獸世界藍(lán)條卡頓怎么辦 魔獸世界藍(lán)條卡頓解決方法

魔獸世界藍(lán)條卡頓解決方法如下:

眾所周知的原因,不知道什么時候開始每次過藍(lán)條之后都會卡好一會,這個卡頓需要關(guān)閉公會新聞來解決。

NGA的用戶@老李三鹿李發(fā)現(xiàn)這是由于暴雪源碼中的事件處理邏輯導(dǎo)致的,并給出了解決方案。

問題根源:

每次玩家過圖時,公會界面都會調(diào)用QueryGuildNews()函數(shù);

重新查詢所有公會新聞,觸發(fā)一連串的“GUILD_NEWS_UPDATE”事件。

魔獸世界藍(lán)條卡頓怎么辦 魔獸世界藍(lán)條卡頓解決方法

事件觸發(fā)分析:

事件觸發(fā)次數(shù)與公會新聞量成正比,新聞量越大,觸發(fā)次數(shù)越多。

測試顯示,小型公會觸發(fā)7次,大型公會觸發(fā)2486次,每次過圖額外觸發(fā)800-2000次不等。

過圖前:

魔獸世界藍(lán)條卡頓怎么辦 魔獸世界藍(lán)條卡頓解決方法

過圖后:

魔獸世界藍(lán)條卡頓怎么辦 魔獸世界藍(lán)條卡頓解決方法

卡頓原因:

每次事件都會執(zhí)行公會新聞更新,拉取所有數(shù)據(jù)并更新新聞列表,這是卡頓的主要來源。

魔獸世界藍(lán)條卡頓怎么辦 魔獸世界藍(lán)條卡頓解決方法

在這里會拉取所有數(shù)據(jù),然后更新新聞列表,這個self.ScrollBox:SetDataProvider(dataProvider);

會清除滾動列表 然后一條條重新添加,這個就是卡頓的主要來源了。

數(shù)據(jù)量估算:

以某公會為例,公會新聞里面一共有7400多條數(shù)據(jù)。

每次過圖時,游戲會重復(fù)向公會新聞框體添加約600-1400萬次數(shù)據(jù)。

魔獸世界藍(lán)條卡頓怎么辦 魔獸世界藍(lán)條卡頓解決方法

解決方案:

@老李三鹿李編寫了一段代碼,替換原有公會新聞框體的事件處理器,限制最多處理一次公會新聞更新,多觸發(fā)的更新會被延遲到1秒后一次性執(zhí)行。

請將代碼復(fù)制并粘貼到您的任意lua文件中。

代碼實現(xiàn):

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)

通過上述修改,玩家可以更加流暢地瀏覽公會新聞,同時減少了因頻繁更新造成的資源浪費。

以上就是筆者整理的魔獸世界藍(lán)條卡頓的相關(guān)內(nèi)容了,更多游戲攻略請關(guān)注玩一玩游戲網(wǎng)。

本站發(fā)布此文僅為傳遞信息,不代表本站認(rèn)同此觀點或證實其描述

相關(guān)閱讀