预览地址: https://fc.elpsy.cn 开发版预览: https://fc.yunyoujun.cn
使用 Vue 3 + Vite + TypeScript 重构的在线 FC/NES 模拟器,重构自 dafeiyu/jsnes。
ROM 基于 JSNES 运行。
- Vue 3(
<script setup>+ 组合式 API) - Vite + TypeScript
- Vitest + @vue/test-utils(单元 / 组件测试)
- ESLint(@antfu/eslint-config)
# 安装依赖
pnpm i
# 启动开发服务器 http://localhost:5173
pnpm dev
# 构建生产产物
pnpm build
# 运行测试
pnpm test
# 代码检查 / 自动修复
pnpm lint
pnpm lint:fix| 游戏按键 | 玩家 1(键盘) | 玩家 2(键盘) |
|---|---|---|
| 上下左右 | 方向键 | I / K / J / L |
| A | A | H |
| B | S | G |
| SELECT | Space | T |
| START | Enter | Y |
移动端可直接触摸手柄按键,并支持 TURBO 连发键。
- 拟真红白机外观:黑色立体十字键、红色 A/B、橙色 TURBO 连发键、立体 SELECT/START、电源指示灯、机身螺丝、扬声器格栅
- CRT 屏幕:扫描线、玻璃高光、像素级(
pixelated)渲染、开机点亮动画 - AudioWorklet 音频:在独立线程输出,避免占用主线程导致卡顿
- 实用功能:全屏、静音、重置、游戏存档 / 读档(按 ROM 区分,存于本地)
- 双人对战:支持玩家 1 / 玩家 2 键盘
- 像素字体(Press Start 2P)、跟随系统的暗色模式(
prefers-color-scheme) - PC + 移动端响应式布局与触摸优化
- 无障碍:键盘焦点可见、
aria-label标签、尊重prefers-reduced-motion - PWA:可添加到主屏幕、离线可安装,缓存玩过的游戏离线重玩
- 云乐坊账号:接入
@yunlefun/sso跨站登录,会员可云端同步游戏存档(跨设备) - 全部组件采用 Vue 3
<script setup>
登录基于 @yunlefun/sso + CloudBase Auth(重型 SDK 已动态 import 代码分割,不影响首屏)。可用环境变量覆盖默认:
| 环境变量 | 说明 | 默认 |
|---|---|---|
VITE_CLOUDBASE_ENV |
CloudBase 环境 ID | yunlefun-8g7ybcxc7345c490 |
VITE_CLOUDBASE_KEY |
publishable key(可选) | 空 |
VITE_YLF_MEMBER_COLLECTION |
会员集合名 | user_memberships |
VITE_FC_MAX_SAVES |
云存档总数上限 | 20 |
接入须知:① 站点 origin 需在云乐坊后台加入 SSO 白名单;② 云存档需 CloudBase
fc_saves集合并配置「仅创建者可读写」权限;③ 会员状态直接复用www.yunle.fun的user_memberships会员体系(按userId查询,expireAt晚于当前即为有效会员),无需额外维护。
- 手柄按键自定义
- 更多游戏 ROM