最底层游戏循环
游戏循环被刻意分成四个时间尺度。这样玩家在每一秒、每一分钟和每一轮都有明确反馈,同时 ESP32 也能把高频绘制与低频存档分离。
0–2 秒:一次触摸事务
- 指针按下时创建唯一事务所有者,记录坐标、时间与起始页面。
- 移动小于 12 px 时仍可能成为点按或长按;超过后永久锁存为取消,不能在抬手时“又算一次点击”。
- 0.65 / 1.2 / 1.9 秒依次进入三段蓄力;松手把持续时间映射为
chargeRatio。 GameEngine.coreAction()在同一提交点计算连击、幸运窗口、热量、装备与永久星礼。- 逻辑先提交,随后表现层播放粒子、浮字、声音和逐帧特效;息屏或设备序列可以屏蔽表现,但不能回滚经济。
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 秒窗口内的两次独立确认。第二次确认后:
- 锁定输入并播放 10 帧
fx_loop。 - 把一颗新星永久写入历史星位。
- 获得星章;每枚历史星章还提供 5% 全局永久倍率。
- 重置本轮星火、点击力与造星队,保留星礼、星章和历史。
- 1.2 秒后自动回到 SEED,并高亮新保存的星星 2.6 秒。
离线循环
网页使用本地存档时间;实板使用 PCF85063 RTC。只有当前墙钟和旧存档都可信时才发放离线收益:
text
credited = min(realElapsed, 4h + toolBattery2h + giftBattery2h)
offlineGain = CPS × credited × 60%RTC 不可信时只更新时间戳,不凭猜测奖励。这个保守策略让玩家进度、测试快照和断电恢复保持可审计。
循环为何适合圆屏
圆屏不适合同时展示十几条购买列表,因此系统通过“中心动作 → 圆周入口 → 单焦点卡片”逐层展开。玩家任何时候只需理解一个主对象;复杂性来自对象之间的长期组合,而不是一屏塞满控件。
