requestAnimationFrame 驅動更新與渲染。keydown/keyup 維護按鍵映射表。drawImage 切割 Sprite Sheet,按幀率切換。const keys = {};
window.addEventListener('keydown', e => keys[e.code] = true);
window.addEventListener('keyup', e => keys[e.code] = false);
// 更新邏輯
function updatePlayer() {
if (keys['ArrowLeft']) player.vx = -SPEED;
else if (keys['ArrowRight']) player.vx = SPEED;
else player.vx = 0;
if (keys['ArrowUp'] && player.onGround) { player.vy = -JUMP_FORCE; player.onGround = false; }
if (keys['KeyZ']) player.shoot();
}
先從簡單的「移動方塊」開始,逐步加入動畫、碰撞、關卡,結合 HTML5 Canvas + CSS 效果更佳。