← 開發手記
《撞球》遊戲畫面

撞球的設計手記:在瀏覽器裡做出推桿、拉桿與側旋

PiuPiu Games 團隊 · 2026 年 10 月 28 日 · 9 號球 · 斯諾克 · 物理模擬

▶立即免費玩

《撞球》是 PiuPiu Games 的網頁撞球遊戲,可以和電腦對手打 9 號球或 6 紅球的斯諾克,也可以開房邀請朋友對戰。撞球遊戲好不好玩,幾乎全看「手感」:球碰到球會不會往預期的方向走、低桿會不會真的拉回來、塞了旋轉吃庫會不會偏。這篇手記用白話說明我們怎麼在瀏覽器裡模擬這些物理,以及中間踩過的坑。

第一步:讓球不要互相穿過去

電腦裡的動畫是一格一格算的。一顆以每秒 1480 單位(我們的最大出桿速度)飛行的母球,在兩格畫面之間可能移動好幾十個單位,比一顆球的直徑還長。如果只在每一格畫面檢查碰撞,高速的球會直接「穿過」目標球,好像沒碰到一樣。

解法是把每一格畫面再切成 6 個小步驟,每一小步都移動一點點、檢查一次碰撞與庫邊。球移動的距離變短,就不會一步跨過另一顆球。這個做法很樸素,但非常可靠,也是後面所有旋轉效果的基礎。

球與球相撞時,我們用接近真實的彈性碰撞:沿著兩顆球中心連線的方向交換速度,彈性係數 0.95,代表每次碰撞會損失一點點能量。庫邊的彈性係數是 0.86,球吃庫之後會明顯慢下來,這也和真實球桌的感覺一致。

早期版本的問題:推桿和拉桿是「假的」

第一版的推桿與拉桿,是在母球碰到目標球的那一瞬間,直接給母球加一段往前或往後的速度。它看起來可以用,但我們反覆實測後覺得不對勁:不論母球離目標球多遠,拉桿的效果都一模一樣;甚至輕輕一推的低桿,也能把母球拉回一大段。

真實的撞球不是這樣。打低桿時,球桿擊中母球下方,母球一邊往前滑、一邊帶著「往後轉」的旋轉。這個旋轉會被檯呢的摩擦慢慢磨掉,所以距離越遠,拉回來的力道越弱;力道太小的低桿,旋轉在碰到目標球之前就已經被磨光了。我們決定重寫這部分,讓推桿與拉桿從物理裡「自己長出來」,而不是用特例去湊。

滑動與滾動:一顆球有兩個速度

新的做法是讓每顆球同時記住兩個量:

當這兩個速度相同,球就是在純滾動,像一顆在地上正常滾的球,只會因為滾動阻力慢慢停下。當兩者不同,球就是在滑動,球底和檯呢之間會產生摩擦,這個摩擦會把兩個速度互相拉近,直到變成純滾動為止。

這裡有一個來自真實物理的比例:一顆實心球在滑動時,摩擦對移動速度的影響,和對轉動的影響是 1 比 2.5。也就是說,摩擦讓移動速度少一點點,轉動就會多出兩倍半的變化。我們照這個比例去算,球從滑動過渡到滾動的過程就會很自然。

有了這兩個速度,出桿就很好描述了:

重點是:撞球那一瞬間,我們只交換移動速度,旋轉完全不做特別處理。推、拉、定三種效果,全都是同一套摩擦規則自然算出來的,而且會隨距離衰減——跟真的一樣。

改了物理,就要重新校一次球速

2026 年 10 月換成「滑動→滾動」模型時,我們遇到一個連帶問題:同樣的力道,球突然滾不遠了。原因也在物理裡——一顆打中心的實心球,從滑動過渡到純滾動的過程中,摩擦會吃掉大約 2/7 的速度,最後只剩 5/7 的速度在滾。舊版沒有這段滑動,所以從來感覺不到。

如果放著不管,玩家已經熟悉的力道條就會全部失準。我們把純滾動時的阻力從 520 降到 300(遊戲內部的單位),讓整體滾動距離回到和舊版相近。換句話說,物理變真實了,但「多少力道大概滾多遠」的手感沒有變。

新模型也帶來一個舊版不存在的狀況:力道很小的低桿,母球可能在半路就把速度滑光,根本碰不到目標球。真實的球桌上也會這樣,所以我們沒有把它當成錯誤去「修掉」,而是在預測線上標出來:碰不到時,母球停下的位置會畫一個紅色虛線圈,出桿前就看得到。

還有一個藏得很深的坑:判斷「所有球都停了、輪到下一桿」時,不能只看移動速度。一顆移動速度已經是零、身上卻還帶著拉桿旋轉的球,下一瞬間又會自己動起來,所以停止判定必須連旋轉一起看。

側旋:只在吃庫時才看得出來

左塞、右塞是另一種旋轉:球繞著垂直的軸轉。在真實的撞球裡,側旋在直線上幾乎看不出效果,真正明顯的時候是碰到庫邊反彈:反彈的角度會往旋轉的方向偏。

所以我們只在吃庫的時候處理側旋:球撞到庫邊時,依照側旋的強度把反彈方向往一邊踢偏,然後側旋大約減半(剩 45%),再吃第二次庫時效果就弱很多。側旋本身也會隨時間慢慢衰減。我們也替偏移量設了上限,避免低速吃庫時被側旋踢出不合理的角度。

這裡我們曾經犯過一個錯:早期版本裡,左邊和底部的庫邊,側旋偏移的方向是反的。打右塞吃頂庫往右偏是對的,但同樣的球吃左庫卻往錯的方向偏。這種錯誤很難靠肉眼察覺,是在重寫旋轉模型時,用「出桿者的右手邊」統一定義方向之後才一併修正。

走位預測線:用同一套物理算未來

撞球最難的是「走位」:這一桿進球之後,母球要停在哪裡,下一桿才好打。為了讓玩家學得會,我們在瞄準時畫出三條線:白色虛線是母球的路徑、黃色線是目標球被撞之後的方向,以及一條青色虛線——母球撞擊之後會走到哪裡。它會隨著力道與旋球即時更新,停點會畫一個虛線圈,如果母球會掉進袋口,還會出現紅色的 ✕。

這條預測線之所以準,是因為它沒有另外寫一套「預測用」的簡化公式,而是直接拿遊戲本身的物理,把這一桿在背景快速跑一遍。預測和實際結果使用的是完全相同的計算,所以兩者的差距只有幾個像素。我們認為這比任何文字教學都有效:你調一下低桿,馬上就能看到母球的停點往回縮多少。

電腦對手:連勝越多越準

不論 9 號球還是斯諾克,電腦對手每一桿都會檢查每一個袋口,計算撞擊點、切球角度與路徑上有沒有其他球擋住,挑出最好打的一顆。為了讓它「像人」,瞄準時會加上一點誤差,而這個誤差會隨著你的連勝數變小:你連勝得越多,對手就越準。排行榜比的正是最高連勝,所以越往後,每一局都越接近真正的對決。斯諾克的電腦對手拿到自由球時,也會自己在 D 區裡挑擺球的位置。

斯諾克為什麼只有 6 顆紅球

斯諾克模式在 2026 年 10 月加入。標準斯諾克有 15 顆紅球,一局要打很久,不適合在手機上利用零碎時間玩。我們讓電腦和電腦對打實測,6 顆紅球一局大約 2~3 分鐘,桿數就已經不少,於是採用正式賽制之一的 6 紅球斯諾克。

斯諾克和 9 號球各有一張排行榜:一局的長度與計分方式完全不同,放在同一張榜上沒有意義。球的大小也不一樣,斯諾克的檯面上要擺 13 顆球,球也比 9 號球小;上線隔天的手機操作改版裡,我們又把斯諾克的球放大了約一成,手機上才看得清楚。規則上,當落後的一方就算把檯面上的分數全部拿下也追不上時,這一局會自動結束,不必打完沒有懸念的殘局。

好友對戰:物理只在出桿的那支手機上跑

2026 年 11 月,撞球成為平台上第二款支援好友對戰的遊戲(第一款是激戰象棋)。玩法沿用同一套:開房的人選好 9 號球或斯諾克,把邀請連結傳給朋友;雙方都要登入,不扣愛心、不進排行榜,只記勝敗。一盤就是一局,想繼續就按「再來一盤」。

撞球比象棋難做得多。象棋的每一步,伺服器都能用同一份規則直接判定;撞球的「一步」卻是一整段物理過程。我們評估過讓伺服器重算每一桿,最後放棄,原因有兩個:這套物理依畫面上的座標與每一格畫面的時間計算,不同尺寸的螢幕、不同的畫面更新率,算出來會有細微差異;而且在伺服器上模擬一桿的運算量,會超過我們所用免費方案的單次上限。最後的分工是:

為了讓不同尺寸的手機看到同一張球桌,所有位置都換算成「以球桌可打區域的寬度為 1」的比例座標。測試時,我們讓兩個尺寸不同的瀏覽器畫面實際對打一盤,比對雙方記錄的球位,必須完全一致才算過。這種做法等於信任出桿方回報的結果;好友之間只記勝敗、不進排行榜,作弊的誘因很低,我們認為這個取捨值得。

限時也為撞球調整過:每桿 60 秒,另外再寬限 16 秒,因為在最後一秒出桿時,球可能還在桌上滾、結果還沒送到。超時沒出手算犯規換手(9 號球給對手自由球,斯諾克給對手 4 分),同一個人連續超時兩次判負;對戰中打開選單也不會凍結時間,因為對手正在等。雙方不用即時連線,而是等待時每 1.5 秒問一次伺服器「有沒有新的一桿」——輪流出桿的遊戲,晚一秒看到並不影響體驗。

手機上的瞄準

電腦上用滑鼠「指哪瞄哪」很直覺,但在手機上,手指會直接蓋住你想瞄的那顆球。我們最後把觸控瞄準分成三種手勢:從某顆球開始拖曳,就是指向那顆球;在空白的檯呢上拖曳,是繞著母球相對旋轉,手指不會擋住目標;原地點一下,就是瞄準那個點。旋球盤點一下會放大,並提供高桿、低桿、左塞、右塞的快捷鍵,大盤也會自動避開母球所在的那半張球桌。

像素風的球桌,向量的球

平台上的遊戲都走像素風,撞球一開始也是。但撞球要精準瞄準,又要一眼讀出 9 顆球的號碼,像素風在這裡吃了虧。2026 年 10 月我們發現,在寬螢幕電腦上,球的半徑只剩 3 個像素,「3」和「9」幾乎分不出來;原因是像素密度依整個視窗寬度計算,視窗越寬,球桌分到的像素反而越少,改成依球桌寬度計算才恢復。

即使如此,小尺寸的點陣號碼還是會糊,瞄準線也有鋸齒。我們做了一個對照版,把球、號碼、瞄準線與目標標示改成全解析度的向量繪製,球桌與介面維持像素風,兩版實際比較之後,決定以向量版為正式版。其他像素遊戲沒有跟進,因為它們的物件大、不需要讀小字。同一時期還修了兩個小地方:目標球的金色箭頭原本固定畫在球的上方,貼著別顆球時像在指那一顆,現在會自動找沒有球的方向;畫面上方的剩餘球順序原本排成兩行,會蓋住桌頂的球,改成了單行。

寫在最後

如果你想體會這套物理,可以做一個小實驗:找一顆離母球很近的目標球,用全力低桿打,母球會大幅拉回;再找一顆離母球很遠的目標球,用同樣的力道與打點,你會發現拉回的距離短了很多——因為旋轉在路上被檯呢磨掉了。看著青色的預測線一邊調整,你很快就會開始用走位來規劃下一桿。

讀完幕後,實際玩一局

免下載、免安裝,手機與電腦瀏覽器直接玩

▶立即免費玩撞球

看《撞球》完整攻略 →

相關開發手記

更多內容:開發手記總覽 · 攻略總覽 · 關於我們 · 回首頁