jiligulu
Browser game

Fishing Joy 浏览器捕鱼游戏

Fishing Joy 是一个 WebGL 街机捕鱼项目,包含自定义水波着色器、捕获概率引擎和低延迟音效,直接在浏览器中游玩。

What it is / 项目是什么

A WebGL arcade fishing game with custom water shaders, a tuned RTP capture engine, and low-latency audio. Aim, shoot, and reel in the big ones.

浏览器里的欢乐捕鱼。WebGL 水波着色器、RTP 概率引擎、低延迟音效,鱼群阵列巡航,瞄准、开炮、爆金币。

How it works / 实现原理

游戏建立在 PixiJS v8 上,水面用自定义片段着色器实现折射、波纹和光斑。鱼群行为采用简化版的 boids 算法,让鱼按队列前进同时各自有微小扰动,看上去更自然。开炮命中后的概率结算用一个可配置的 RTP(return-to-player)模型,保证短期随机性同时不让玩家感觉被骗。音效用 Tone.js 调度,把命中、爆炸、金币声做到 30ms 以内的延迟。

Who it is for / 适合谁

喜欢轻量街机玩法、WebGL 视觉效果和浏览器小游戏的玩家。

Typical use cases / 常见使用场景

  • 休闲时玩两把消磨时间
  • WebGL 学习素材:水面着色器和粒子效果
  • 体验"街机捕鱼"在浏览器里的实现可能性

Key features / 主要功能

  • WebGL 水波和鱼群巡航效果
  • 调校过的捕获概率与反馈节奏
  • 低延迟音效和浏览器内即时游玩体验

Design notes / 设计取舍

Fishing Joy 不是商业捕鱼游戏的复刻,而是一个技术 demo + 玩具。我们没有内购也没有真金钱奖励——所有金币都是装饰性的。这样做是为了保留"捕鱼"的反馈节奏感,同时不复制商业版本那些容易引导赌博心理的设计。

Technology stack / 技术栈

Each layer below was chosen for what it lets the project avoid as much as what it enables. Together they shape the latency, the build pipeline, and how quickly new ideas can be tried in production.

下面这些选择,更多是为了排除某些复杂度,而不只是为了“用上”。它们共同决定了项目的延迟特性、构建流水线,以及把一个想法跑通的最短路径。

  • PixiJS v8

    A WebGL-first 2D renderer optimised for sprites, particles, and high-frame-rate canvas work.

  • WebGL

    GPU-accelerated rendering inside the browser, enabling effects and throughput that the DOM cannot match.

  • Tone.js

    A Web Audio framework for music programming — synthesis, scheduling, and signal routing with familiar musical concepts.

FAQ / 常见问题

游戏免费吗?

完全免费,没有内购。

为什么有时卡顿?

游戏需要 WebGL 和较新的浏览器。低端设备或老 GPU 上可能掉帧。可以尝试关闭其他标签页,或在桌面端打开。

会出移动端版本吗?

当前版本已经做了移动端适配,但触屏体验和桌面端略有差异。后续可能会单独优化。

代码开源吗?

当前不开源。如果想交流实现细节(特别是水面着色器和命中概率引擎),可以邮件联系。

Continue reading

The blog goes deeper into the ideas behind Fishing Joy. These pieces unpack the psychology, the engineering trade-offs, and the design questions this project raises.