高畫質的遊戲往往帶來手機的發熱和卡頓從而影響遊戲體驗。開發者希望能夠獲取到手機執行的實時狀態,從而能夠進行主動的負載調節,將手機發熱時遊戲體驗影響降到最低;同時手機也可以透過遊戲傳入的關鍵場景如"正在下載資源""團戰中""大廳中"等,做差異化的排程保障,給玩家提供更好的遊戲體驗。
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}`);
}
瞭解更多詳情>>
訪問遊戲服務聯盟官網
獲取遊戲場景感知功能開發指導文件