Slingshot Launcher 是一個五關的瀏覽器遊戲,每一關在固定的 640 乘 360 遊戲場地上放置一個圓形目標,每命中一次恰好獲得 200 分,五個目標全部清除時最高得分為 1,000 分。你透過將投射物朝遠離目標的方向拖曳並放開來瞄準;遊戲會將你的拖曳方向反轉成發射向量,用固定的螢幕向下重力計算出一條確定性的軌跡,然後在穿過目標圓的第一個線段上判定命中,或是在畫面上留下一條虛線軌跡讓你看出剛才發生了什麼。同樣的五關、同樣的五個目標、以及同樣得分的拉動會在每次造訪時重複出現,因此在一次 Restart 之後能命中的發射,重新發射依然會命中。在緩慢的分頁中沒有會飄移的動畫計時器、沒有帳號、沒有伺服器運算,也不會上傳任何座標、軌跡或分數。可以直接在 Slingshot Launcher 試玩,本指南的其餘部分會詳細說明每一次拉動的作用、軌跡為什麼會呈現那個樣子,以及滑鼠、觸控和鍵盤操作之間的差異。

Slingshot Launcher 設定的五關任務
五個關卡中的每一關都在 640 乘 360 場地上的固定位置放一個圓形目標,並在固定的發射器原點放一顆投射物。紙上談兵的話工作很簡單:選擇拉動方向、釋放投射物,讓計算出的路徑穿過目標圓。因為每關恰好一個目標,命中一次分數必定增加 200 分並顯示下一關的目標,所以最大可能的完成分數就是五關總計 1,000 分。五個關卡、五個目標中心,以及五個目標半徑都是固定的遊戲參數,不是隨機抽樣。關卡順序、發射器原點、重力值、速度比例和投射物半徑在任何一局之間都不會改變,這就是為什麼 Restart 之後能完全重現你剛才遊玩的相同條件。想看更深入的逐關攻略的讀者,可以參考 Slingshot Game 5-levels walkthrough,裡面涵蓋了完整的過關流程;本篇文章則聚焦在你所能控制的機制。
反向拖曳規則以及螢幕座標如何決定發射
發射規則遵循熟悉的彈弓概念:投射物的飛行方向與你的拖曳方向相反。具體來說,遊戲會用固定的發射器原點減去你釋放時的拉動點來取得一個拖曳向量,然後把該向量反轉並乘上一個由產品作者設定的速度比例。因此把投射物往左拉會產生正向的水平發射速度,釋放後投射物向右移動。往下拉會在螢幕座標系統中產生負的垂直發射速度,而在這個系統中 y 值越小在畫面上位置越高,所以向下的拖曳實際上是把投射物往螢幕上方、也就是發射器上方的任何東西射去。這與 canvas API 和 2D 遊戲引擎使用的螢幕座標慣例一致:y 越大越靠下,所以負的垂直速度代表向上移動。可拉的長度有上限,讓指標、觸控和鍵盤玩家共用同一個由作者設定的拉動範圍,這就是為什麼同樣的拖曳距離無論使用哪種輸入裝置都會產生相同的發射速度。一旦理解了方向會反轉、螢幕 y 軸是上下顛倒的,遊戲中每一條虛線軌跡都變得可以預測。
如何遊玩並命中所有目標拿到 1,000 分
- 開啟 Slingshot Launcher,等投射物與目標在第一關穩定下來;發射器原點和目標中心在該關是固定的。
- 用指標、觸控筆或手指按住投射物,然後把它朝遠離目標的方向拖曳。你拖曳的方向會成為發射方向的反方向,所以要瞄準時,請朝與目標相對於發射器的位置呈鏡像的方向拖動。
- 在感覺不超過上限的距離釋放拖曳。短距離的拉動產生低速弧線、下墜得快;較長的拉動則產生較平、較快的路徑,在重力把它拉下來之前飛得更遠。
- 觀察遊戲計算出的虛線軌跡。如果該線穿過目標圓,該關就會過關,並在下一關出現之前恰好獲得 200 分。
- 如果路徑沒中,研究虛線走向後再拉第二次。你可以再用指標重新拖曳,或者把焦點放在遊戲場地上,用方向鍵以五個像素為單位逐步移動拉動點,再按下空白鍵或 Enter 發射。
- 重複直到五個關卡全部破完。分數等於命中目標數乘以 200,所以完美跑完恰好就是 1,000 分,沒有任何加分或四捨五入。
- 如果兩次不同的正規化拉動都失手,這一局就會鎖定,遊戲會要求你 Restart;同一個失敗的拉動不會被計為兩個不同的嘗試。
解讀虛線預覽與計算路徑的差異
遊戲區中會出現兩種不同樣式的虛線,分別回答兩個不同的問題。較淡的預覽線會即時反應你目前的拉動,大致顯示如果你現在就放開投射物會飛向哪裡;這是你在還在決定時要看的線。釋放後出現的是計算路徑虛線,顯示遊戲剛才實際計算出的軌跡。計算路徑虛線才是碰撞測試所用的依據,所以當命中沒有被判定、但較淡的預覽看起來很接近時,差異通常是預覽粗略化的視覺呈現與逐段精準碰撞檢查之間的容差問題。遊戲會立即取樣一整條確定性的路徑,而不是執行一個不穩定的逐幀物理引擎,這代表釋放後你看到的虛線軌跡就是碰撞測試所檢查的同一條路徑;不存在一個獨立的動畫步驟可能會與規則檢查結果不一致。失敗後讀取虛線軌跡是選擇修正拉動最快的方式,因為下一次拉動只要相對於發射器原點透過一個鏡像點瞄準目標即可。
指標、觸控與鍵盤控制並列比較
三種輸入方式都套用同一條發射規則,但設定拉動點的方式不同。指標和觸控玩家直接從投射物上開始拖過遊戲區,然後放開;範圍使用 Pointer Events,所以同一個拖曳動作對滑鼠、觸控板、觸控筆或手指都有效。鍵盤玩家則先把焦點放在範圍上,再用方向鍵以五個像素為單位移動拉動點,然後按空白鍵或 Enter 發射。鍵盤處理只作用於有焦點的範圍,所以在 Restart 按鈕上按方向鍵和 Enter 並不會發射。
| 輸入方式 | 如何設定拉動 | 如何觸發發射 |
|---|---|---|
| 滑鼠、觸控板或觸控筆 | 在投射物上指標按下,遠離目標拖曳,在上限範圍內放開 | 指標放開時自動觸發 |
| 觸控 | 在投射物上手指按下,遠離目標拖曳,在上限範圍內放開 | 觸控結束時自動觸發 |
| 鍵盤(範圍已取得焦點) | 方向鍵以五個像素為單位逐步移動拉動點 | 空白鍵或 Enter,或 Launch aimed shot 按鈕 |
因為可拉動的長度有上限,指標拖曳和鍵盤方向鍵作用在同一個由作者設定的範圍內,而 Launch aimed shot 按鈕為偏好按按鈕勝過按空白鍵或 Enter 的鍵盤使用者提供了一個明確的觸發方式。無效、非有限、太短或太長的拉動會讓發射狀態保持不變,所以遊戲不會在一個超出上限才結束的誤觸拖曳上悄悄消耗掉一次發射。
確定性軌跡為何在 Restart 後依然相同
你看到的軌跡不是即時模擬。當你釋放時,遊戲會使用 OpenStax 在其拋體運動章節中所描述、並由 Boston University Physics 獨立交叉驗證的分量形式拋體運動方程式,同步計算出整條路徑:水平位置等於初始 x 加上水平速度乘以時間,垂直位置等於初始 y 加上垂直速度乘以時間,再加上二分之一向下螢幕重力乘以時間的平方。產品接著在四秒鐘的時間範圍內以 0.02 個遊戲秒為單位對該方程式取樣,並用合併後的目標與投射物半徑對每一段相鄰的軌跡線段與目標圓進行測試。由於方程式、常數、發射器原點、目標中心、目標半徑以及取樣時間範圍都是固定的遊戲參數,每次造訪、每次 Restart 時,同樣的拉動都會產生相同的路徑。這就是為什麼 Restart 後能命中的發射重新發射依然會命中,以及為什麼失手的發射除非你改變拉動,否則會以同樣方式失手的實際理由。這些數字刻意採用遊戲數值,而不是地球重力或真正的橡皮筋;這個軌跡是休閒式的瞄準練習,不是彈道計算機。
何時遊戲會鎖定以及為何必須 Restart
失敗的發射會被正規化為一個五像素的拉動簽章,也就是你釋放位置的粗略指紋。重複同一個正規化簽章不會再被視為一次新的不同失誤,因為它沒有提供新的嘗試模式;如果你已經試過那個拉動,遊戲早就知道它行不通。第二個不同的失敗簽章會把當前這一局鎖定並要求你 Restart,因此兩次真正不同的失手就是遊戲用來表示這一系列拉動無法朝命中方向前進的訊號。成功的命中會在下一個目標出現前先清除該關的失敗簽章,所以每個新關卡都會以一組全新的允許失誤重新開始。已完成和死結狀態會凍結發射邏輯,這就是為什麼在等待 Restart 時方向鍵和 Enter 不再觸發發射。Restart 會把遊戲回到當前關卡的精確初始狀態,所以發射器原點、目標中心、拉動範圍和分數全都正好在該關開始時的位置。無效、非有限、太短或太長的拉動也會讓狀態保持不變,所以在範圍邊緣的誤觸釋放不會悄悄結束你的這一局。
延伸閱讀:Stop the Timer Game: Five Visible Targets, 1,000 Points。