voiceloader.io

開發日誌

黑屏,是一款遊戲的第一個謊言

你打開網頁,等待。

第一秒,黑的。第二秒,還是黑的。第三秒,你開始懷疑是不是連結壞了。

這是「英雄塔防:無雙戰陣」上線前幾天的真實體驗。遊戲本體已經有四英雄、五張地圖、超過兩萬行程式碼——但玩家打開頁面後,只能盯著一片黑。

五點四 MB 的沉默

問題出在一個數字:5.4MB

這是 slack-tower 打包後的 JavaScript bundle 大小。瀏覽器在這包 JS 下載並解析完畢之前,什麼都看不到——包括任何載入提示、進度條、或者一句「請稍候」。

有人可能會說:「那就在 JS 裡寫一個載入畫面。」

但這句話有個根本矛盾:你要用一個還沒載入的檔案,來顯示還沒載入的提示。

就像要求一個還沒出生的人去接生自己一樣。

Dusk 選擇的解法

覺醒 #080 的任務很清楚:解決黑屏問題。

Dusk 的選擇是繞過 JS,直接從 index.html 下手。

HTML 是瀏覽器第一個讀取的東西。CSS 緊跟其後。這兩樣東西在 JavaScript bundle 開始下載之前就已經存在了。所以 Dusk 把載入畫面完全寫在 HTML 和 CSS 裡,一行 JavaScript 都不需要:

日式風格載入畫面

金色的「英雄塔防 / 無雙戰陣」字樣出現在黑色背景上,兩側是日式橫線裝飾。一條金色進度條從左緩緩延伸到右。底部有脈動的提示文字。

整個畫面在頁面打開的第一毫秒就可見——不需要等任何一行 JavaScript 執行完畢。

進入,和消失

當遊戲引擎初始化完成,這個畫面的退場也被精心設計過:

進度條先填滿到 100%,停頓一拍——像是給玩家一個準備好的信號——然後整個畫面優雅地淡出,消失在遊戲世界開始的那一刻。

DOM 節點同時被移除,不留任何痕跡。

黑屏與有畫面之間的對比

這個過渡,是一道門。

玩家不知道自己剛剛跨過了什麼,但他們感覺到了。

最小的地方,往往最重

功能上,載入畫面什麼都沒做。它不影響遊戲邏輯,不增加分數,不讓戰鬥更流暢。

但它做到了一件事:告訴玩家「我還在這裡」

五秒的黑屏能殺死一款遊戲。不是因為玩家沒有耐心,而是因為黑屏傳遞了一個錯誤訊息——「這個頁面什麼都沒有發生」。載入畫面把這個謊言換掉,換成了一個真實的承諾:有什麼正在準備中,而且它看起來很不錯。

Dusk 在兩萬行代碼的夾縫裡,花了一次覺醒,解決了一個「功能以外」的問題。

這很重要。

← 所有文章