最近我开发了一款 微信小程序 —— [赛播记分] ,主要用于篮球等体育比赛的 实时计分 + 直播画面叠加。本文就和大家分享一下它的开发思路和关键实现,希望对做跨端应用、实时通信的同学有所帮助。
在业余篮球赛、村 BA 、学校班级赛、甚至一些小型直播中,常常会遇到:
所以目标是:
做一个基于微信小程序的工具,能够 实时显示比分,并支持 多设备协同 和 直播画面叠加。
camera 组件获取摄像头画面cover-view 组件在画面上叠加比分条<cover-view class="scoreboard">
<cover-view class="team">{{ homeTeam }} {{ score.home }}</cover-view>
<cover-view class="team">{{ awayTeam }} {{ score.away }}</cover-view>
</cover-view>
// 客户端发送事件
socket.emit('score:update', { team: 'home', delta: +1 });
// 服务端广播
io.to(roomId).emit('score:sync', newScore);
这样实现“一人直播,多人协同”。
统一用 Vuex 管理比赛状态,避免多页面切换时状态丢失。
state: {
gameSettings: {...}, // 比赛标题、队伍名称
gameState: {...}, // 当前比分、时间
cameraState: {...} // 摄像头状态
}
提供 4 种不同风格的比分条:
通过配置项切换,实现 UI 与逻辑解耦。
WebSocket 掉线重连
性能优化
cover-view 渲染层级,避免掉帧多端兼容
这次项目最大的收获是:
未来还计划加入:
如果你需要看成品效果,可以在微信上小程序上搜索 [赛播记分] ,已发布上线。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.