# 游戏对局回放
游戏对局回放是 一组录制游戏画面来生成对局回放、并可以将对局回放分享给好朋友的 API,基础库 >= v2.8.0 支持。
# 录制
wx.getGameRecorder() 返回一个全局单例 GameRecorder,是一个游戏录制对象。录制游戏画面是一项比较消耗性能的能力,在某些系统、设备上无法进行游戏画面录制。因此在调用游戏画面录制能力前,需先判断当前环境是否支持该能力。
const recorder = wx.getGameRecorder()
console.log('是否支持录制游戏画面', recorder.isFrameSupported())
// 目前还未实现,后期可能会支持到
console.log('是否支持录制游戏画面的同时也录制音频', recorder.isSoundSupported())
所有和录制有关的 API 都挂载在 GameRecorder 上:
- GameRecorder.start() 开始录制
- GameRecorder.stop() 结束录制
- GameRecorder.pause() 暂停录制
- GameRecorder.resume() 从暂停状态恢复到录制状态
- ...
调用 GameRecorder.start() 开始录制,调用 GameRecorder.stop() 结束录制。
const recorder = wx.getGameRecorder()
// 发起开始录制的调用
recorder.start()
// start 事件的回调函数的执行表示录制的真正开始
recorder.on('start', () => {
// 真正开始录制后的 5 秒后结束录制
setTimeout(() => {
recorder.stop()
}, 5000)
})
// stop 事件的回调函数的执行表示录制完成
recorder.on('stop', (res) => {
console.log(`对局回放时长: ${res.duration}`)
})
如果在录制过程中有玩家思考等待等过程,可以调用 GameRecorder.pause() 暂停录制,然后再用 GameRecorder.resume() 恢复录制。
recorder.pause()
// pause 事件的回调函数的执行表示录制真正暂停
recorder.on('start', () => {
// 真正开始暂停后的 5 秒后恢复录制
setTimeout(() => {
recorder.resume()
}, 5000)
})
// resume 事件的回调函数的执行录制继续进行
recorder.on('resume', () => {
console.log('继续录制')
})
如果想舍弃已经在录制的视频,可以调用 GameRecorder.abort()
recorder.abort()
// abort 事件的回调函数的执行表示录制中的游戏画面已经被舍弃
recorder.on('abort', () => {
console.log('继续录制')
})
stop 事件触发就表示已经有一个录制好的视频被输出来了。录制完成的视频保存在内部,不能被访问到,也不能直接播放,只能发送给好友或分享到微信游戏中心。内部只会保存 最近一次录制的视频,发起分享时也只会分享这个 最近一次录制的视频。
# 分享
游戏对局回放的分享可以通过调用 API wx.operateGameRecorderVideo() 触发,或 在用户点击 游戏对局回放分享按钮 时发起。
如果使用 API 触发,可以支持分享到游戏圈、会话。
如果使用分享按钮触发,需要调用 wx.createGameRecorderShareButton() 创建 游戏对局回放分享按钮。参数分为两部分,指定按钮样式的 style 和指定分享配置的 share。
按钮的默认样式如下:
icon 指定左侧的图标,text 指定右侧的按钮文本,style.backgroundColor 指定按钮的背景色,image 指定按钮的背景图片,会覆盖背景色。完整的参数说明参见 wx.createGameRecorderShareButton() 。
const button = wx.createGameRecorderShareButton({
// 样式参数
style: {
left: 10,
top: 150,
height: 50,
color: '#ffffff',
textAlign: 'center',
fontSize: 16,
borderRadius: 4,
iconMarginRight: 16,
paddingLeft: 1,
paddingRight: 30,
},
// 按钮的背景图片
image: 'button.jpg',
text: '自定义文案',
icon: 'icon.jpg',
// 分享参数
share: {
query: 'a=1&b=2',
// 背景音乐的路径
bgm: 'walkin.mp3',
timeRange: [[0, 1000], [2000, 3000]],
title: {
template: 'default.score',
data: {
score: 6500
}
},
button: {
template: 'default.enter',
}
}
})
点击按钮后会拉起视频编辑界面,用户可以对视频再加一首背景音乐或增加一些表情、贴纸。点击视频编辑界面右下角的绿色按钮可以将视频分享到会话 或 朋友圈(beta测试)。
点击分享到会话的卡片可以进入视频,下方按钮可以跳转到该小游戏开发者指定的路径。
点击分享到朋友圈的链接可以进入视频,下方按钮可以跳转到该小游戏开发者指定的路径。可根据 场景值 区分适配,朋友圈内打开“预览模式” 1154,“预览模式”打开小游戏 1155。
TIPS:对局回放分享朋友圈为测试能力,从基础库 version 2.12.0 开始支持,此功能为beta版,暂仅在Android平台支持。
- 低版本微信客户端打开时,会进入一个升级提示页面
- 支持打开开发版、体验版,无权限人员进入时页面会提示无权限
分享参数的含义如下:
- share.title 对局回放标题的配置。这个配置生成的文案会出现在视频上和视频的分享卡片的副标题处。配置的含义见 wx.createGameRecorderShareButton()。
- share.button 对局回放按钮文案的配置。在视频上点击这个按钮会跳转到录制这个视频的小游戏。配置的含义见 wx.createGameRecorderShareButton()。
- share.query 点击按钮跳转小游戏时的 query。
- share.bgm 对局回放的背景音乐。用户可以在转发之前的视频编辑界面上再选一首背景音乐,两个音乐会混合在一起,而不是覆盖。
- share.timeRange 录制对局回放的裁剪区间。是一个二维数组,单位 ms(毫秒)。[[1000, 3000], [4000, 5000]] 表示剪辑已录制视频的 1-3 秒和 4-5 秒最终合成为一个 3 秒的视频。对局回放剪辑后的总时长最多 60 秒,即 1 分钟。
# 分享过程中的异常
分享结果不能被获取到,但是如果分享过程中发生了客户端层面的异常,GameRecorderShareButton.onTap() 注册的回调函数会执行。
button.onTap(res => {
console.log(`错误码:${res.error.code},错误信息:${res.error.message}`)
})