【心得】程序角度分析,卡頓閃退問題未來有沒有可能改善

我這幾天遊玩觀察下來,發現到處都是偷懶代碼的痕迹,以下從程序的角度分析我在這款遊戲上看到哪些問題:

1. 聊天室連接問題

每次打開聊天室,切換任何頻道(例如世界頻跟地區頻互切),可以觀察到聊天內容全部重新讀取,也就是說本地沒有對聊天內容做緩存,這會造成連接資源被浪費。
從這個地方可以觀察到,開發團隊的內部的code review機制也許有點問題,沒有一個能力足夠的資深工程師去檢查程序的運行邏輯,也許只是簡單手動測試一下功能,看起來沒問題就過了。而這在測試環境幾乎不會被看出來,在不受監督的情況下,程序品質只能看工程師良心了。
(而這個問題會延伸到後續的問題,我下面再分析)

2. 獲得道具提示消失問題

各位不知道有沒有發現只要連續玩一段時間,畫面上就不會再顯示你獲得了什麼新道具,但是打開背包確認則是有獲得金幣跟道具的。我推測這是因為畫面上顯示獲得道具的清單(List)爆表了,這個顯示組件超出最大上限崩潰後,沒有一個重啟機制導致。
(或者說,根本就不該讓它超出上限)
從這個例子中可以觀察到,這款遊戲有部分的資源回收機制是有問題的,延伸上一點說的,在這些「測試下看不出差別」的地方,到處可見工程師偷懶的細節,才會在上線後一個一個浮現。而我分析了一個課長直播抽卡的youtube的影片,發生不少次抽卡閃退的現象。可以看出過場動畫中的寶箱的閃爍是每次不同的,說明這個動畫很有可能是實時渲染的;然而可能因為沒有正確的回收資源而導致程序崩潰的現象一直發生。
此外還有一個很明顯是資源回收機制出問題的例子就是王國修練書的人物模型異常顯示,還有持續掛機會越玩越卡都暗示了可能有這樣的問題。(我看手機的內存消耗從一開始登錄打怪0.8GB左右,一路增加到2GB+)

3. 五職業共用機制容易引發未預期的效果

其實共用這個功能很明顯是一個代碼偷懶的一個例子,不知道大家有沒有發現每次切換角色進遊戲的時候,生命值都會剩40%~50%左右,然後自動喝掉2~3瓶水回滿。
(幸好這遊戲水很便宜,不然…)
這很顯然是因為角色在登錄後才重新計算生命值的結果,推測多出來需要回復的血量是來自共用的防具、成就、寵物…等。
而共用可能導致的問題還不只這些,例如使用等級較低的職業接取燕子任務或討伐任務,回到等級高的職業去解,可以「解低戰力任務獲得高戰力所需經驗」;又或者AI模式重新登錄時,不論你開哪個職業掛的,中間的提示永遠是寫你等級最高的那個職業。
除此之外,遊戲的傷害力計算也是偷懶做法,使武器切換功能形同虛設。
(或者說,那其實只是三個同屬性武器的必殺技槽?)
正常來說攻擊力的計算應該是:「角色數值 * 當前武器素質」,而這遊戲卻只是簡單地將武器素質加到角色數值上再下去去計算傷害。
組隊的掉落率除以人數也是一個很瞎的寫法,一般遊戲在組隊的掉寶上,會做一個隊伍的臨時獎池,獲得金幣道具先放進這個獎池在按照機率(或者按序)去分配;這遊戲倒好,沒做!上線了發現組隊平白得到了五倍打寶率,再趕緊暴力將掉落率除以人數。
(我不確定是不是遇到了浮點數除法精度丟失的問題,導致這個除下來的結果低於預期,所以低於了單人掛機的掉寶率)
上述說的這些問題,都是程序開發之初就確定的架構上的疏忽,而這又延伸到下一個問題:各功能系統缺乏一個架構性的規劃。

4. 各種系統架構性問題:

例如:
(1.) 地形系統:
某些需要靠跳躍才能通過的地形障礙,很顯然並沒有一個計算地形高低落差等相關函數庫去處理,而是很單純的對這個地形障礙物做判斷角色狀態決定是否讓角色通過,所以才出現了用滾的通過原本要用跳的才能過去的地形,並且絕大多數的地形高低差是不能跳過去的,跳躍功能形同虛設,只是角色「看起來」跳而已。
(爛code的特色之一就是「看起來是這麼回事,但實際邏輯根本不是那樣」)
(2.) 鎖定系統:
一樣是個形同虛設的功能,因為技能按下去的時候是優先判斷方向鍵的方向來決定施法/攻擊方向的。
(3.) 地圖系統:
像是混沌領域、下水道等地圖無法從世界地圖上找到,且世界地圖就只有兩層,我估計都是前端工程師寫死的,並沒有辦法直接按照現有的地圖結構直接創建樹狀數據來呈現。換句話說,未來如果出了任何一個新地點,只要工程師沒有開code加,就不會顯示;而不是只要有新地圖,就可以自動顯示在相對位置上。
(4.) 任務通知:
通知機制不是按照有沒有可以接取的名聲任務去做提示,而是通過了某個任務後就提示可接取新的名聲任務,所以才導致玩其他職業的時候重複通知的問題。

結論

一周體驗下來,可以感受到這款遊戲的代碼到處飄著偷懶的味道,要改善似乎得大規模地去重寫,並且得請資深一點的來改,但這感覺不太可能。
以上~
棄坑啰,大家掰掰~~~

本文來自網路,不代表3樓貓立場,轉載請註明出處:https://www.3loumao.org/13166.html?variant=zh-tw
返回頂部