Skip to content

最底层游戏循环

游戏循环被刻意分成四个时间尺度。这样玩家在每一秒、每一分钟和每一轮都有明确反馈,同时 ESP32 也能把高频绘制与低频存档分离。

0–2 秒:一次触摸事务

  1. 指针按下时创建唯一事务所有者,记录坐标、时间与起始页面。
  2. 移动小于 12 px 时仍可能成为点按或长按;超过后永久锁存为取消,不能在抬手时“又算一次点击”。
  3. 0.65 / 1.2 / 1.9 秒依次进入三段蓄力;松手把持续时间映射为 chargeRatio
  4. GameEngine.coreAction() 在同一提交点计算连击、幸运窗口、热量、装备与永久星礼。
  5. 逻辑先提交,随后表现层播放粒子、浮字、声音和逐帧特效;息屏或设备序列可以屏蔽表现,但不能回滚经济。
ts
const chargeMultiplier = 1 + chargeRatio * 4 * (turbo ? 1.35 : 1)
const gain = floor(
  tapPower
  * comboMultiplier
  * heatMultiplier
  * luckyMultiplier
  * chargeMultiplier
  * permanentMultiplier
  * badgeMultiplier
)

2–60 秒:节奏与风险

  • 连击:1.4 秒内继续点击,最多 20 层,每层 +5%。
  • 幸运节拍:同步指针进入目标角 ±10° 时基础 ×3;星礼后 ×4。
  • 热量:点击和蓄力积累热量;热量越高单击越强,但满热触发 3 秒过热保护。
  • 冷却:基础每秒减少 2.4 热量;风扇提高 40%,冰袋让幸运点击额外减少 8。
  • 三段 burst:v7 把长按后的反馈延伸为 1.8 / 3.0 / 4.5 秒自动连击节奏;进入息屏、发射或设备操作时立即取消。

这组系统的关键不是“越快点越好”,而是让玩家在连击、幸运角度、蓄力和热量之间做短周期选择。

1–10 分钟:自动化与 TEAM

玩家用星火购买六类造星队。每位成员都有基础产量和身份规则;成员放在三条轨道上,跨轨角度接近时形成 TEAM,每条有效连接带来 15% 产量增益,单个成员最多计算三条连接。

SHOP 拖动期间只更新 render-only preview。只有稳定抬手才一次性提交相位、任务、成就和 fx_grow;离开捕获环、穿过圆心、取消或切页都丢弃预览。这避免了“手指还在试位置,经济已经在后台反复变化”。

30 分钟以上:发射与永久成长

累计 lifetime 星火达到阈值后,STAR 页显示可发射收益:

ts
badges = floor(sqrt(lifetimeSparks / 1_000_000))

发射采用 10 秒窗口内的两次独立确认。第二次确认后:

  1. 锁定输入并播放 10 帧 fx_loop
  2. 把一颗新星永久写入历史星位。
  3. 获得星章;每枚历史星章还提供 5% 全局永久倍率。
  4. 重置本轮星火、点击力与造星队,保留星礼、星章和历史。
  5. 1.2 秒后自动回到 SEED,并高亮新保存的星星 2.6 秒。

离线循环

网页使用本地存档时间;实板使用 PCF85063 RTC。只有当前墙钟和旧存档都可信时才发放离线收益:

text
credited = min(realElapsed, 4h + toolBattery2h + giftBattery2h)
offlineGain = CPS × credited × 60%

RTC 不可信时只更新时间戳,不凭猜测奖励。这个保守策略让玩家进度、测试快照和断电恢复保持可审计。

循环为何适合圆屏

圆屏不适合同时展示十几条购买列表,因此系统通过“中心动作 → 圆周入口 → 单焦点卡片”逐层展开。玩家任何时候只需理解一个主对象;复杂性来自对象之间的长期组合,而不是一屏塞满控件。