Bootstrap

游戏与硬件深度协同,打造更精细的体验优化

高画质的游戏往往带来手机的发热和卡顿从而影响游戏体验。开发者希望能够获取到手机运行的实时状态,从而能够进行主动的负载调节,将手机发热时游戏体验影响降到最低;同时手机也可以通过游戏传入的关键场景如"正在下载资源"“团战中”"大厅中"等,做差异化的调度保障,给玩家提供更好的游戏体验。

HarmonyOS SDK游戏服务(Game Service Kit)提供游戏场景感知功能开发能力,游戏场景感知是指通过开放API接口,打通游戏和硬件协同的通道。一方面,游戏可以通过set接口为系统提供精细化场景信息、配置信息、网络信息等数据;同时系统可以通过callback接口向游戏反馈系统实时状态,发热预测等信息,使得双方能够利用这些信息进行更紧密和深入的协作,在系统资源有限的情况下优化玩家的游戏体验。

游戏服务提供游戏场景感知API接口,帮助开发者快速实现游戏与系统的交互,开发者通过游戏场景感知,可以完成向系统发送游戏数据以及从系统获取设备状态信息两大动作。

场景介绍

游戏场景感知主要服务于游戏场景优化,其特点是可以通过API接口感知游戏场景和运行状态的不同,使用不同策略调度系统资源以达到更精细化的优化效果。

业务流程

开发步骤

1.导入Game Service Kit及公共模块。

import { gamePerformance } from '@kit.GameServiceKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

2.导入相关模块后,需先调用init接口对游戏场景感知进行初始化。

说明:

init接口是调用其他接口的前提,如果未初始化或初始化失败,将无法调用其他接口。

首次调用init接口时,需确保连接网络,否则会导致鉴权失败。

let gamePackageInfo: gamePerformance.GamePackageInfo = {
    messageType: 0,
    bundleName: "com.example.demo", // 仅示例,请替换为实际的游戏包名
    appVersion: "1.0"
}
try {
  gamePerformance.init(gamePackageInfo).then(() => {
    // 初始化成功
    hilog.info(0x0001, 'demo', `Succeeded in initing.`);
  })
} catch (error) {
  // 初始化失败
  let err = error as BusinessError;
  hilog.error(0x0001, 'demo', `Failed to init. Code: ${err.code}, message: ${err.message}`);
}

3.调用on接口可以订阅设备状态变化事件,获取设备状态变化的通知(如设备温控档位)。

function onDeviceStateChange(data:gamePerformance.DeviceInfo) {
  // 设备信息详情
  hilog.info(0x0001, 'demo', `device state changed.`);
}

// 订阅deviceStateChanged事件
try {
  gamePerformance.on('deviceStateChanged', onDeviceStateChange);
} catch (error) {
  // 订阅失败
  let err = error as BusinessError;
  hilog.error(0x0001, 'demo', `Failed to subscribe. Code: ${err.code}, message: ${err.message}`);
}

4.初始化成功后,可以通过调用updateGameInfo接口上报游戏信息(包信息、配置信息、场景信息和网络信息)。

// 以更新游戏场景信息为例
let gameSceneInfo: gamePerformance.GameSceneInfo = {
    messageType: 2,
    sceneID: 7,
    importanceLevel: 4
}
try {
    gamePerformance.updateGameInfo(gameSceneInfo).then(() => {
        // 更新游戏场景信息成功
        hilog.info(0x0001, 'demo', `Succeeded in updating.`);
    });
} catch (error) {
    // 更新游戏场景信息失败
    let err = error as BusinessError;
    hilog.error(0x0001, 'demo', `Failed to update. Code: ${err.code}, message: ${err.message}`);
}

5.如不再需要订阅,则可以通过调用off接口取消订阅设备状态。

function onDeviceStateChange(data:gamePerformance.DeviceInfo) {
  // 设备信息详情
  hilog.info(0x0001, 'demo', `device state changed.`);
}

// 取消订阅deviceStateChanged事件
try {
  gamePerformance.off('deviceStateChanged', onDeviceStateChange);
} catch (error) {
  // 取消订阅失败
  let err = error as BusinessError;
  hilog.error(0x0001, 'demo', `Failed to unsubscribe. Code: ${err.code}, message: ${err.message}`);
}

// 取消deviceStateChanged事件的全部订阅
try {
  gamePerformance.off("deviceStateChanged");
} catch (error) {
  // 取消订阅失败
  let err = error as BusinessError;
  hilog.error(0x0001, 'demo', `Failed to unsubscribe. Code: ${err.code}, message: ${err.message}`);
}

了解更多详情>>

访问游戏服务联盟官网

获取游戏场景感知功能开发指导文档

;