Hola r/Devvit! 我想与大家分享一个使用 Devvit Web 构建的项目: Pixel War: Sub Edition,这是一个将 r/Place 体验带入.subreddits 个性化的app。
🎮 以下是项目功能
- 一个64x64到256x256的协作画布(pixel canvas),让 subreddit成员可以在实时进行绘画
-可由mod配置的缓冲机制(10秒至60分钟)
- 排行榜显示前十名贡献者
- 每个像素的历史记录(谁放置并何时)
- 来自 r/Place 的 17 色调色板
- 与移动设备兼容(支持缩放和触摸)
- 由管理者创建的主题轮盘
🛠️ 技术栈
- Devvit Web(React + Hono + Tailwind CSS)
- Redis用于canvas状态、缓冲和排行榜的状态
- 使用短轮询(每约2秒)来在实时进行用户同步
- 使用HTML Canvas API进行canvas渲染,支持缩放和触摸
✨ 其他技术细节
canvas管理: 每个像素存储在Redis像素 hash 中,包含“color”、“author”和“timestamp”。整个画布作为一个压缩的数组通过Redis提供。短轮询(每约2秒)将发送自上次轮询以来更改的像素以最小化数据。
缓冲用户: 使用TTL(Time-To-Live) Redis.set 跟踪每个player个人的缓冲。缓冲时间过期后,玩家可以继续绘制。
排行榜: 使用Redis.sorted set 的zIncrBy和zRange功能来累积玩家每个像素的得分,并使用sorted set 来获得top10得分。
自动化初始化: 当应用程序安装在一个subreddit上时触发onAppInstall事件来自动创建一个64x64大小的欢迎画布。
🚀 项目展示
该项目已在r/pixelwarsub_dev上线。你可以尝试试用并向我们提供建议!
使用Devvit Web时短轮询vs,webSockets的经验: 在 Devvit Web 应用中实现实时性时,有人有先前的经验吗?我很好奇您的想法。
评论 (0)