你是不是还在用恐龙跑、贪吃蛇等老旧套路?别急,我今天给你拆开《沙盒与竞技》背后的“神器”,教你用纯 HTML、CSS、JS 轻松造一款炫酷静态网页小游戏。先别扔技术堆,先炒好一碗“代码汤”,等你掂量一次,绝对让你惊讶:原来这些技术点竟然如此易学又实用。
先从 Canvas 做起。Canvas 就像你的画布,支撑 2D 绘图。你只需写几行代码,就能画出像素阶级别的“打砖块”之躯:
```html
```
JS 里拿到 context 之后,用 `rect`、`fillRect`、`fillStyle` 画板凳,别忘了 `requestAnimationFrame` 做帧刷新——这就好比让 60 FPS 的动漫引擎给你搭了一架地铁,速度跟电梯差不多。
接着点亮角色。把一张 PNG 切成数组做精灵表,把移动逻辑放进 `keydown` 事件里。写了还可以走个 "摩擦感" 效果——用 `Math.max(0, velocity - friction)` 让角色在失去力时慢慢停。你可以把 `setInterval` 当作粗犷版 `requestAnimationFrame`,但你得准备好被“卡顿”折磨。
碰撞检测不等于“碰撞”。我们要做的是 AABB(Axis-Aligned Bounding Box)检测。内置 `if (rect.x < rect2.x + rect2.w && rect.x + rect.w > rect2.x && rect.y < rect2.y + rect2.h && rect.y + rect.h > rect2.y)` ——只要把它打包进函数里,随时复用。别忘了碰撞后播放音效,像这样:`new Audio('ding.mp3').play()`,让射击声异想天开。说到异想天开,点个面板左键点“迷你弹幕”,就能让你大喊:可我还是让他跑— (这就叫让代码舞蹈)。
声音可不是外挂,能让游戏瞬间高大上。写一个全局音量控制器,使用 `context.currentTime` 控制播放点,做出 2 秒低音下暗房里 0.5 秒大炮,当你把音量塞到 100% 时,还能自动循环尾音,像是心跳加速。你只要把 `
然后是 《点点连连看》?不!我们继续深挖,不让你停步——就在 Canvas 彩绘完成后,掺入 localStorage 记录分数。你只需几行:`localStorage.setItem('score', currentScore)`,就能在回访时召回历史高分。要是在 UI 里让它点点数点点 `innerText`,人家就感到自己像侦探在解数码谜团。你会发现,满分 9999 已经足够满足大多数厨房战士的自豪感。
别忘了,游戏需要“动力”——即手机、平板该动不动?我们借助 `window.requestAnimationFrame` 绑定到视口变化。写个事件函数 `function onResize(){ game.width = window.innerWidth; game.height = window.innerHeight; }`,让你游戏的画布跟随窗口自然拉伸,既避开“边框被截”尴尬,又能让手机端游戏 UI 迎合大屏幕。记得对 `resize` 做防抖,噙一份 200ms。
至此,你的静态小游戏已经几乎具备完整生态:绘图、输入、碰撞、音效、存档、适配。来点小特色——集成股票道具系统,按功能评分给玩家小额奖励点。打游戏可拿点什么微信小程序?当你想关机速度时,添加 `game.pause = true`,在主循环中检查它即可随时暂停。