当前位置: 首页 > article >正文

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

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

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}`);
}

了解更多详情>>

访问游戏服务联盟官网

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


http://www.kler.cn/a/519386.html

相关文章:

  • 基于C++的DPU医疗领域编程初探
  • 「 机器人 」系统辨识实验浅谈
  • 如何利用AI LLM不断迭代生成更具专业性的提示词探索未知领域
  • (算法竞赛)使用广度优先搜索(BFS)解决迷宫最短路径问题
  • 正则表达式中常见的贪婪词
  • C# OpenCV机器视觉:红外体温检测
  • 【Django DRF Apps】从零搭建一个webSocket Django App
  • 【JavaEE】-- 计算机是如何工作的
  • tmux 介绍与使用
  • 开源的仓库管理系统-ModernWMS
  • 水利水电安全员B证考试真题(含答案)
  • Android AutoMotive—CarPowerManagementService
  • 使用shell脚本修改linux静态网络IP、网关和hosts文件
  • PSD是什么图像格式?如何把PSD转为JPG格式?
  • zookeeper的介绍和简单使用
  • Plesk 2个安全功能介绍
  • 2025年01月25日Github流行趋势
  • 基于物联网的风机故障检测装置的设计与实现
  • OpenHarmony 5.0.2 Release来了!
  • (Halcon)轮廓等分切割(项目分析)
  • 性能优化案例:通过合理设置spark.storage.memoryFraction参数的值来优化PySpark程序的性能
  • Flutter_学习记录_Tab的简单Demo~真的很简单
  • 【开源免费】基于SpringBoot+Vue.JS智慧图书管理系统(JAVA毕业设计)
  • 【DB】Oracle存储过程
  • doris:MySQL Load
  • 【2025年数学建模美赛E题】(农业生态系统)完整解析+模型代码+论文