歡迎來到第十三天!在上一篇 Day 12 的實機試玩中,朋友提出了一個非常關鍵的優化建議:「單純比對配方有點太平淡了,應該要給手速極快的玩家額外的獎勵!」
為了大幅提升遊戲的爽快感與重複遊玩價值(Replayability),今天我們將在第二款小遊戲「雪花冰極速挑戰」中,正式實作 Combo(連擊)動態加成機制!
Combo 機制的核心目的,是獎勵那些「連續正確點擊且反應極快」的玩家。
我們設計的規則如下:
有效時間視窗(Combo Window):每次正確點擊食材時,會觸發一個 2.0 秒 的連擊倒數。如果在 2.0 秒內再次點擊正確食材,Combo 數加 1,並重置倒數時間。
失誤與中斷(Combo Reset):若點擊錯誤食材,或是超過 2.0 秒沒有進行下一步,Combo 數將直接歸零。
動態倍率公式(Multiplier Formula):
每增加 1 次 Combo,得分倍率就會提升 0.2 倍,最高上限為 3.0 倍加成:
\[\text{得分倍率 Multiplier} = \min(1.0 + \text{comboCount} \times 0.2, 3.0)\]
在 Cocos Creator 中,我們需要同時維護「連擊數」與「微秒級倒數」。透過 Vibe Coding,我向 Cursor 下達需求:
「請在
RecipeManager.ts中加入comboCount與comboTimer邏輯。當玩家正確點擊時累積 Combo 並重置 2 秒倒數;在update(dt)中扣減倒數時間,倒數歸零時重置 Combo。完成時根據倍率計算額外加分,並觸發漂浮文字特效。」
以下是 Cursor 為我們產出的核心 TypeScript 實作:
// RecipeManager.ts 中的 Combo 邏輯
private comboCount: number = 0;
private comboTimer: number = 0;
private readonly COMBO_MAX_TIME: number = 2.0; // 連擊有效時間 2 秒
public onCorrectIngredient(): void {
// 累積 Combo 並重置倒數計時
this.comboCount++;
this.comboTimer = this.COMBO_MAX_TIME;
// 計算動態倍率
const multiplier = Math.min(1.0 + this.comboCount * 0.2, 3.0);
const baseScore = 100;
const finalStepScore = Math.floor(baseScore * multiplier);
this.currentScore += finalStepScore;
// 觸發 Combo 視覺回饋(UI 飄字與縮放特效)
this.showComboUI(this.comboCount, multiplier);
}
update(dt: number) {
// 當前有 Combo 時,進行倒數
if (this.comboCount > 0) {
this.comboTimer -= dt;
this.updateComboProgressBar(this.comboTimer / this.COMBO_MAX_TIME); // 更新 UI 連擊能量條
if (this.comboTimer <= 0) {
// 時間到,Combo 中斷!
this.comboCount = 0;
this.onComboBreak();
}
}
}
光有數字計算還不夠,遊戲要好玩,**果汁感(Juice Effect,即視覺打擊感)**才是靈魂!
我們運用 Cocos Creator 的 tween 動畫,實作了以下特效: