事件
游戏暂停与恢复事件
通过game_api_pause
和game_api_resume
事件,平台通知游戏需要暂停或恢复游戏进程。这些事件简化了与我们平台集成的过程,并有助于满足审核要求(参见1.3和4.7条)。
支持暂停和恢复事件的游戏可以被额外分发至外部平台。
game_api_pause
和 game_api_resume
事件
这些事件帮助您跟踪:
- 全屏或rewarded广告的显示与关闭;
- 购买窗口的打开与关闭;
- 浏览器标签页的切换;
- 浏览器窗口的最小化与最大化。
它们与游戏玩法标记方法保持一致。触发game_api_pause
事件时,将调用GameplayAPI.stop()
方法,而触发game_api_resume
事件时,则调用GameplayAPI.start()
。
如果游戏已经通过GameplayAPI.stop()
方法停止(例如,当玩家打开菜单时),然后触发game_api_pause
事件,在随后的game_api_resume
事件中不会调用GameplayAPI.start()
方法。这样可以在不破坏游戏玩法逻辑的情况下,保留游戏当前状态。
使用Yandex Games SDK中的on()
和off()
方法分别订阅事件和取消订阅。
示例
const pauseCallback = () => {
pauseGame(); // 您的函数,用于暂停游戏循环和音乐。
console.log('GAME PAUSED');
};
ysdk.on('game_api_pause', pauseCallback); // 订阅 'game_api_pause' 事件。
ysdk.off('game_api_pause', pauseCallback); // 取消订阅 'game_api_pause' 事件。
const resumeCallback = () => {
resumeGame(); // 您的函数,用于恢复游戏循环和音乐。
console.log('GAME RESUMED');
};
ysdk.on('game_api_resume', resumeCallback ); // 订阅 'game_api_resume' 事件。
ysdk.off('game_api_resume', resumeCallback ); // 取消订阅 'game_api_resume' 事件。
游戏启动时全屏广告
重要
平台会在所有游戏启动时自动显示全屏广告。
与通过 ysdk.adv.showFullscreenAdv() 调用的广告模块不同,启动广告没有直接的回调函数。要正确处理其展示,请监听 game_api_pause
和 game_api_resume
事件:
- 收到
game_api_pause
事件时,关闭游戏音效并暂停游戏进程。 - 等待
game_api_resume
事件后恢复游戏。
这对于音效和游戏进程立即启动的游戏尤为重要。
启动广告处理示例
let gameStarted = false;
let isPaused = false;
// 游戏初始化函数
function initGame() {
// 订阅暂停和恢复事件
ysdk.on('game_api_pause', handlePause);
ysdk.on('game_api_resume', handleResume);
// 检查当前是否处于暂停状态
// 如果否,则直接启动游戏
if (!isPaused) {
startGame();
}
}
function handlePause() {
isPaused = true;
// 停止音效和游戏进程
console.log('GAME PAUSED - waiting for resume');
}
function handleResume() {
isPaused = false;
// 如果游戏尚未启动,则启动游戏
if (!gameStarted) {
startGame();
} else {
// 恢复音效和游戏进程
}
console.log('GAME RESUMED');
}
function startGame() {
gameStarted = true;
// 初始化音效
// 启动游戏循环
console.log('GAME STARTED');
}
// 执行游戏初始化
initGame();
其他事件
您还可以监听用户与应用交互时触发的其他事件。
enum ESdkEventName {
EXIT = 'EXIT',
HISTORY_BACK = 'HISTORY_BACK',
ACCOUNT_SELECTION_DIALOG_OPENED = 'ACCOUNT_SELECTION_DIALOG_OPENED',
ACCOUNT_SELECTION_DIALOG_CLOSED = 'ACCOUNT_SELECTION_DIALOG_CLOSED',
}
ysdk = {
EVENTS: {
EXIT: ESdkEventName.EXIT,
HISTORY_BACK: ESdkEventName.HISTORY_BACK,
ACCOUNT_SELECTION_DIALOG_OPENED: ESdkEventName.ACCOUNT_SELECTION_DIALOG_OPENED,
ACCOUNT_SELECTION_DIALOG_CLOSED: ESdkEventName.ACCOUNT_SELECTION_DIALOG_CLOSED,
},
dispatchEvent(eventName: ESdkEventName, detail?: object): Promise<unknown> {},
on(eventName: ESdkEventName, listener: Function): () => void {}
};
HISTORY_BACK 事件
注意
此事件仅在游戏在电视上运行时可用。
要跟踪返回按钮的点击行为,请使用以下方法:
ysdk.on(ysdk.EVENTS.HISTORY_BACK, () => {
// 向用户显示自定义游戏对话框,其中提供用于
// 确认退出游戏、转到内部设置、商店等的选项
});
EXIT 事件
如果用户在点击返回之后打开的自定义对话框中确认退出游戏,则游戏应发送退出事件。为此,请使用以下方法:
ysdk.dispatchEvent(ysdk.EVENTS.EXIT);
游戏账号选择对话框
平台会同时保存已授权和未授权玩家的游戏进度。玩家可以先不登录进行游戏,之后再登录账号。此时系统会保存两份不同的进度:一份与账号关联,另一份为匿名游玩数据。平台会显示对话框让玩家根据游戏时长、最后登录日期等参数比较存档,并选择要使用的进度。
如果您需要频繁同步玩家数据或将游戏进度存储在自己的服务器上,请监听账号选择对话框关闭后的进度变更事件。
SDK 为此提供两个事件:
ACCOUNT_SELECTION_DIALOG_OPENED
— 对话框打开时触发ACCOUNT_SELECTION_DIALOG_CLOSED
— 对话框关闭时触发
对话框打开时可暂停定期同步玩家数据。对话框关闭后可返回主菜单或重启游戏,并重新请求玩家对象。
示例
// 订阅账号选择对话框打开事件
ysdk.on(ysdk.EVENTS.ACCOUNT_SELECTION_DIALOG_OPENED, () => {
// 暂停同步玩家数据
});
// 订阅账号选择对话框关闭事件
ysdk.on(ysdk.EVENTS.ACCOUNT_SELECTION_DIALOG_CLOSED, async () => {
// 返回游戏主菜单或刷新页面
// ...
// 重新获取玩家数据
const player = await ysdk.getPlayer();
const data = await player.getData();
});
备注
技术支持团队将协助您将已完成的游戏发布到 Yandex 游戏平台。关于开发和测试方面的具体问题,其他开发人员将在Discord 频道中进行回答。
如果您遇到 Yandex Games SDK 方面的问题或有其他问题想要咨询,请联系支持部门: