
《體素世界》更新了。現在主角看得見、而且能飛。我把新版從頭玩過一遍,也把那個 837 KB 的網頁檔整份讀完——結果最值得寫的,不是新加的飛行,而是開發者刻意「不」改掉的那幾件事。
先解決最多人卡住的一件事:V 不是飛行鍵
如果你聽說「可以按 V」就進去亂按,會發現自己沒有飛起來。因為 V 是切換視角,飛行是另一個動作。這兩件事剛好同時更新,很容易被講成同一件。
V 會在三段視角之間循環:第一人稱 → 第三人稱・背後 → 第三人稱・正面。換句話說,V 解決的是「我想看到自己」,不是「我想飛起來」。


飛行的開法是連按兩下空白鍵,而且只在創造模式有效。這是體素沙盒類遊戲的共同慣例,原始碼註解裡也直接寫了「沿用體素沙盒的慣例」——不自創一套,玩過類似遊戲的人就不用重學。
飛行:它故意讓你撞得到牆
實際飛起來之後,第一個感覺是「怎麼會卡到樹」。我一開始以為是 bug,去翻原始碼才發現這是刻意的:
/* 飛行(只在創造模式)。雙擊空白鍵開關,沿用體素沙盒的慣例。
飛行時仍然會撞到方塊——能穿牆的話等於把整個世界的碰撞都關掉了。 */
這句話講的是一個很實際的取捨:飛行如果順便開穿牆,整個世界的物理就等於被關掉了,蓋出來的房子、挖出來的洞穴全部失去意義。所以它讓你飛,但你還是得繞過樹。

真正值得看的,是它「拒絕」改掉的東西
新增功能最容易犯的錯,是順手把舊的操作也一起改掉。這份程式碼裡有兩處註解,明白寫著為什麼不這麼做。
/* C:自由環繞鏡頭。刻意不塞進 V 的循環——V 的三段是既有操作,
多一段就會改變玩家已經習慣的按鍵節奏。 */
拉遠拉近:Alt/⌥ + 滾輪,或 [ ]。
滾輪本身維持 v1 的「換方塊」不動——那是既有操作,不能因為加功能就改掉。
「不能因為加功能就改掉既有操作」——這句話寫在一個免費小遊戲的註解裡,比很多正式軟體的規格書還清楚。
還有第三個例子。這一版加了生存模式,但預設仍然是創造模式,註解解釋了原因:曾經把預設改成生存,結果「一進去快捷欄是空的、什麼都放不了,看起來就像壞了」。加東西不該把原本的玩法換掉——所以生存模式被放在 G 鍵後面,想玩的人自己切。
生存模式:怪物只在暗的地方生成,所以蓋房子第一次有了意義
按 G 切到生存模式,規則就變了:方塊要自己挖、自己合成,血量會扣,天黑之後暗處會冒出東西。
關鍵在「暗處」兩個字。敵人的生成條件不是隨機亂灑,而是直接讀取光照場:亮度 = max(天光 × 當下日照,方塊光),夠暗才生成。這帶來一個很漂亮的連鎖效果:

連敵人的眼睛都是有理由的。牠的身體吃光照,在全黑的夜裡會整個隱形;但眼睛被刻意設成不吃光的材質,註解寫著:「在全黑的夜裡,兩點紅光是唯一看得到牠的方式」。而且為了讓紅色在色調映射之後還留得住,程式刻意壓低綠藍、把紅推到過曝——這是一個為了「玩家看得見」而做的顏色工程,不是美術隨手挑的色票。
我實際測到的數字
我用自動化瀏覽器把這一版完整跑了一遍,順便記錄了幾個可以驗證的數字:
「0 次網路請求」這件事的意思是:你在裡面走到哪、挖了什麼、蓋了什麼,沒有任何一個位元組離開你的瀏覽器。不是因為它承諾不傳,而是它根本沒有可以傳的對象。
我檢查過,這個檔案沒有註冊 Service Worker,也沒有 PWA manifest。所以第一次開啟仍然需要網路把那 837 KB 抓下來,關掉分頁再開也需要(除非剛好命中瀏覽器快取)。真正成立的說法是「載入完成之後,遊玩過程不再連線」,而不是「可以離線使用」。這兩句話差很多,不該混著講。
為什麼我覺得這比遊戲本身更值得給孩子看
這個站是我們用 AI 協作做出來的實驗品,三款遊戲都是(我在 七月那篇實測裡把三款都玩過一輪,也在裡面死了三次)。但真正的教材不是遊戲畫面,是原始碼裡那些用中文寫的「為什麼」。
在瀏覽器按右鍵「檢視網頁原始碼」,你會看到的不是一堆看不懂的符號,而是一段一段解釋「這裡為什麼這樣做」的說明:為什麼世界要用 Uint8Array 而不是字典(128³ 用字串鍵會吃掉上百 MB)、為什麼貼圖每格要留 8 像素的邊(不留的話 mipmap 會讓鄰格顏色互相滲色)、為什麼改一個方塊只重建那一塊(v1 是整個世界重建,所以會卡)。
對正在學程式或正在學英文的孩子來說,這是兩件事同時發生:一邊是看得懂的中文因果推理,一邊是 albedo、normal、ORM、mipmap、ambient occlusion 這些真的會出現在職場上的技術英文。背單字表學不到它們,把一個自己玩過的遊戲拆開來看就會記得。
而那句「不能因為加功能就改掉既有操作」,其實不只適用於遊戲。它適用於任何一個要被別人使用的東西。
怎麼玩
本文所有操作、數值與程式碼引文,均直接取自 2026 年 9 月 18 日當天線上版本的 voxel-world.html,並以自動化瀏覽器實際執行驗證。網路請求次數、世界尺寸、載入行為皆為實測,非引述宣傳文案。
文中所有遊戲畫面均為實機截圖,未經修圖,也未使用任何 AI 生成影像。畫面中的 HUD 數值(座標、fps、敵人數、亮度)為當下真實數值。
遊戲引擎為 three.js r128(MIT License),完整授權條文內嵌於該檔案中。遊戲內容仍在持續更新,實際操作請以當下版本開始畫面所列的說明為準。
這些遊戲是我們在宿霧做的教學實驗:先讓孩子玩,再讓他打開原始碼看看裡面在寫什麼。從玩家變成創造者,中間隔的通常不是天份,是有沒有人把蓋子掀開給他看過一次。








