事件
游戏暂停与恢复事件
通过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 方面的问题或有其他问题想要咨询,请联系支持部门: