遊戲速度由兩個主要參數控制,都在 server/config.js 中定義。
FRAME: 20, // 每 20ms 渲染一次- 作用: 控制遊戲主循環執行的頻率
- 單位: 毫秒 (ms)
- 預設值: 20ms (相當於每秒 50 次更新)
- 影響:
- 數值越小 = 遊戲更新越頻繁 = 更流暢
- 數值越大 = 遊戲更新越慢 = 較卡頓
建議值:
- 超流暢:
10-15ms(適合高性能) - 標準:
20ms(預設,平衡效能和流暢度) - 省資源:
30-50ms(適合低性能環境)
ACTION_INIT_TIME: 15, // 方塊自動下落的初始時間- 作用: 控制方塊自動下落的速度
- 單位: 遊戲循環次數 (ticks)
- 預設值: 15 (表示每 15 個遊戲循環才下落一次)
- 計算公式:
實際下落時間 = ACTION_INIT_TIME × FRAME 例如: 15 × 20ms = 300ms = 每 0.3 秒下落一格
影響:
- 數值越小 = 方塊下落越快 = 遊戲越難
- 數值越大 = 方塊下落越慢 = 遊戲越簡單
建議值:
- 非常快 (困難):
5-8(約 0.1-0.16 秒/格) - 快速 (有挑戰):
10-12(約 0.2-0.24 秒/格) - 標準 (預設):
15(約 0.3 秒/格) - 慢速 (簡單):
20-25(約 0.4-0.5 秒/格) - 新手模式:
30+(約 0.6+ 秒/格)
FRAME: 20,
ACTION_INIT_TIME: 15,- 適合一般玩家
- 平衡難度和流暢度
FRAME: 15,
ACTION_INIT_TIME: 10,- 適合熟練玩家
- 高難度,需要快速反應
FRAME: 20,
ACTION_INIT_TIME: 25,- 適合新手或休閒玩家
- 有更多時間思考
FRAME: 10,
ACTION_INIT_TIME: 8,- 適合專業玩家
- 極高難度
- 打開
server/config.js - 找到以下行:
FRAME: 20, ACTION_INIT_TIME: 15,
- 修改數值
- 重啟伺服器
可以考慮將這些參數改為環境變數,方便調整:
FRAME: process.env.GAME_FRAME || 20,
ACTION_INIT_TIME: process.env.GAME_SPEED || 15,然後在啟動時指定:
GAME_FRAME=15 GAME_SPEED=10 npm start當玩家按下 ↓ 鍵時,actionTime 會立即設為 0,使方塊立刻下落一格。
玩家按 Space 時,方塊會持續下落直到碰撞,實現瞬間落地。
FRAME太小 (< 10ms) 可能導致伺服器負載過高- 多人遊戲時建議維持
FRAME >= 15ms
ACTION_INIT_TIME太小 (< 5) 會讓遊戲幾乎無法操作ACTION_INIT_TIME太大 (> 30) 會讓遊戲失去挑戰性
- 所有玩家使用相同的速度設定
- 修改配置後需要重啟伺服器
- 先使用預設值測試基本功能
- 逐步調整
ACTION_INIT_TIME,找到合適難度 - 根據伺服器效能調整
FRAME - 測試多人遊戲時的流暢度
- 配置檔:
server/config.js - 遊戲邏輯:
server/gameLogic.js - 遊戲狀態:
server/gameState.js - 主循環:
server/socketHandlers.js(startGame 函數)