chinese-8ball · 项目介绍

chinese-8ball

本页由项目自动归档生成,源码与最新进展以 GitHub 仓库为准。

项目简介

chinese-8ball 是一个基于 Three.js 的 3D 中式八球(八球/十六彩)台球网页游戏,以单个 index.html 即可运行,无需任何构建步骤。它用真实的桌面比例建模球台与球,实现了瞄准、力度控制与简易物理碰撞,可作为台球物理与 WebGL 渲染的演示项目。

技术栈

维度 技术
主要语言/框架 HTML / CSS / JavaScript(ES Module)
关键依赖/库 Three.js 0.160.0(通过 importmap 从 unpkg CDN 加载)、OrbitControls 插件
数据存储 无(纯前端,状态保存在内存)
运行/部署方式 浏览器直接打开 index.html,零构建、零后端

核心功能 / 亮点

  • 3D 球台建模:按真实比例(TABLE_WIDTH=2.54、TABLE_HEIGHT=1.27 等)构建绿色台呢、木质护栏、6 个袋口(四角 + 两中袋)、桌腿与顶部灯罩,并启用 PCFSoftShadowMap 软阴影与 ACESFilmicToneMapping。
  • 完整球组与三角架:rackOrder 定义 1–15 号球的标准摆位,1–7 为全色、8 号黑色、9–15 为花色;createBallTexture 用 Canvas 程序化生成球面纹理与数字圆圈。
  • 瞄准系统:点击白球拖拽瞄准,findFirstHitBall 用射线检测计算首个碰撞球,并显示半透明「假想球」(ghostBall) 与红色目标球预测方向线 (predictLine)。
  • 力度控制:右侧 power-bar 力度条根据拖拽距离(上限 0.5 单位)实时计算击球力量。
  • 简易物理模拟:updatePhysics 实现摩擦衰减(FRICTION=0.985)、库边反弹(恢复系数 0.8)、球与球的动量传递碰撞,以及袋口检测(入袋即移除球体)。
  • 视角控制:OrbitControls 支持鼠标拖拽旋转、滚轮缩放,并限制俯仰角与缩放距离。
  • 双人对战 UI:顶部双方面板显示玩家名与各自剩余球架(ball-rack),中央显示「中式八球」标题与当前回合信息。

目录结构

1
2
chinese-8ball/
└── index.html # 单文件实现:HTML 结构 + CSS 样式 + Three.js 场景/物理/交互脚本(约 713 行)

相关链接