魔獸世界在近期更新后很多小伙伴們會出現(xiàn)藍(lán)條卡頓的問題,這個卡頓其實是因為暴雪源碼中的事件處理邏輯出現(xiàn)問題導(dǎo)致的,需要關(guān)閉公會新聞來解決,詳細(xì)操作步驟請看正文。
魔獸世界藍(lán)條卡頓解決方法如下:
眾所周知的原因,不知道什么時候開始每次過藍(lán)條之后都會卡好一會,這個卡頓需要關(guān)閉公會新聞來解決。
NGA的用戶@老李三鹿李發(fā)現(xiàn)這是由于暴雪源碼中的事件處理邏輯導(dǎo)致的,并給出了解決方案。
問題根源:
每次玩家過圖時,公會界面都會調(diào)用QueryGuildNews()函數(shù);
重新查詢所有公會新聞,觸發(fā)一連串的“GUILD_NEWS_UPDATE”事件。
事件觸發(fā)分析:
事件觸發(fā)次數(shù)與公會新聞量成正比,新聞量越大,觸發(fā)次數(shù)越多。
測試顯示,小型公會觸發(fā)7次,大型公會觸發(fā)2486次,每次過圖額外觸發(fā)800-2000次不等。
過圖前:
過圖后:
卡頓原因:
每次事件都會執(zhí)行公會新聞更新,拉取所有數(shù)據(jù)并更新新聞列表,這是卡頓的主要來源。
在這里會拉取所有數(shù)據(jù),然后更新新聞列表,這個self.ScrollBox:SetDataProvider(dataProvider);
會清除滾動列表 然后一條條重新添加,這個就是卡頓的主要來源了。
數(shù)據(jù)量估算:
以某公會為例,公會新聞里面一共有7400多條數(shù)據(jù)。
每次過圖時,游戲會重復(fù)向公會新聞框體添加約600-1400萬次數(shù)據(jù)。
解決方案:
@老李三鹿李編寫了一段代碼,替換原有公會新聞框體的事件處理器,限制最多處理一次公會新聞更新,多觸發(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)。