事件

游戏暂停与恢复事件

通过game_api_pausegame_api_resume事件,平台通知游戏需要暂停或恢复游戏进程。这些事件简化了与我们平台集成的过程,并有助于满足审核要求(参见1.34.7条)。

支持暂停和恢复事件的游戏可以被额外分发至外部平台。

game_api_pausegame_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_pausegame_api_resume 事件:

  1. 收到 game_api_pause 事件时,关闭游戏音效并暂停游戏进程。
  2. 等待 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 方面的问题或有其他问题想要咨询,请联系支持部门:

发送电子邮件