stat_level.md
10.1 KB
c82c1e268c01f6f5968c49fd7525ce1eb4e5290f/inner/stat_level.md#">关卡分析打点
c82c1e268c01f6f5968c49fd7525ce1eb4e5290f/inner/stat_level.md#">简介
关卡分析,为开发者提供小游戏详细的关卡数据,分析各关卡玩家的通关状况,帮助开发者从数据角度衡量游戏设计的合理性,调节难易度,观察各关卡道具使用情况和奖励获取状况,对比分析各个指标,通过量化玩家数据,提高游戏体验。
c82c1e268c01f6f5968c49fd7525ce1eb4e5290f/inner/stat_level.md#">后台使用
接入关卡分析接口后,登录后台->头部tab切换到【游戏数据】->【产品分析】->【关卡分析】可查看关卡进入用户数据、失败次数、失败率、平均完成时间等):
接入API:
名称 | 功能说明 |
---|---|
PCSDK.stat.logLevelRelive | 游戏关卡复活上报 |
PCSDK.stat.logLevelHide | 游戏关卡onHide上报,在游戏界面注册wx.onHide事件,判断不属于复活、失败、成功状态下上报此数据 |
PCSDK.stat.logLevelFail | 游戏关卡失败上报 |
PCSDK.stat.logLevelWin | 游戏关卡成功上报 |
PCSDK.stat.logMerge | 游戏二合一合成最高等级上报 |
- #### logLevelRelive
PCSDK.stat.logLevelRelive(levelId: string | number , params?: { attr?: number, ext?: any } ): void
定义:关卡复活成功数据上报
参数:
levelId: string | number 必传,游戏关卡id
params: object 选传,关卡需要的其他参数,目前只支持传递2个属性: attr、ext
{
attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级)
ext: object 选传 扩展参数:{ key1:val1, key2:val2 }的格式
}
点此查看完整示例如何添加关卡复活成功打点代码
- #### logLevelHide
PCSDK.stat.logLevelHide(levelId: string | number , params?: { attr?: number, ext?: any } ): void
定义:监听游戏战斗界面onHide时上报关卡的数据。什么是界面onHide?请详读微信小游戏wx.onHide 注意事项:
1)游戏战斗界面监听平台的onHide事件,使用此api上报关卡onHide打点。
2)游戏战斗界面退出后,要移除onHide事件监听,避免在其他界面下,onHide时候执行此次上报。
3)一定要屏蔽游戏复活中、游戏失败、游戏通过成功状态,这三种状态下避免上报此打点,详看下面示例。
参数:
levelId: string | number 必传,游戏关卡id
params: object 选传,关卡需要的其他参数,目前只支持传递2个属性: attr、ext
{
attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级)
ext: object 选传 扩展参数:{ key1:val1, key2:val2 }的格式
}
点此查看完整示例如何添加关卡onHide打点代码
- #### logLevelFail
PCSDK.stat.logLevelFail(levelId: string | number , params: { ctime: number, first: number, attr?: number, ext?: any } ): void
定义:关卡失败数据上报
参数:
levelId: string | number 必传,游戏关卡id
params: object 必传,关卡需要的其他参数
{
ctime: number 必传 关卡耗时 = 当前时间-关卡进入时间,单位秒
first: number 必传 是否第一次体验关卡,1是,0否
attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级)
ext: object 选传 扩展参数:{ key1:val1, key2:val2 }的格式
}
点此查看完整示例如何添加关卡失败打点代码
- #### logLevelWin
PCSDK.stat.logLevelWin(levelId: string | number , params: { ctime: number, first: number, attr?: number, ext?: any } ): void
定义:关卡成功通关数据上报
参数:
levelId: string | number 必传,游戏关卡id
params: object 必传,关卡需要的其他参数
{
ctime: number 必传 关卡耗时 = 当前时间-关卡进入时间,单位秒
first: number 必传 是否第一次体验关卡,1是,0否
attr: number 选传 战斗属性(例如:关卡战斗中所使用的枪支等级)
ext: object 选传 扩展参数:{ key1:val1, key2:val2 }的格式
}
完整示例,以上四个接口使用场景:
SDK中监听了onHide事件,当游戏onHide时,SDK会发送事件名为'app.hide'的自定义事件,开发者可在代码中使用PCSDK.event.bindEvent监听该事件,使用PCSDK.event.removeEvent移除对应监听事件,详细文档event模块文档请阅读event事件模块。
/**
* 游戏界面
**/
exports class GameScene extends BaseView{
// 关卡id
private missionId: number;
// 当前选中使用的枪支等级
private currSelectGun: number;
// 游戏状态机
private gameState: GameState;
// 关卡开始时间
private enterTime: number;
constructor(){
this.gameState = GameState.Idle;
}
// 游戏界面打开
open(){
super.open();
this.gameState = GameState.Idle;
this.enterTime = new Date().getTime();
this.addEvent();
}
// 游戏界面关闭
close(){
super.close();
this.removeEvent();
}
// 添加游戏事件监听
private addEvent(){
// 监听SDK中app.hide事件事件消息
PCSDK.event.bindEvent( 'app.hide', this.handleHide, this);
// 监听游戏中level.relive事件消息
EventCenter.I.add('level.relive', this, this.handleLevelRelive);
}
// 移除游戏事件监听
private removeEvent(){
PCSDK.event.removeEvent( 'app.hide', this.handleHide, this);
EventCenter.I.remove('level.relive', this, this.handleLevelRelive);
}
// 游戏复活中
private doGameRelive(){
this.setState(GameState.Relive);
}
// 游戏通关失败
private doGameFail(){
this.setState(GameState.Fail);
}
// 游戏通关成功
private doGameWin(){
this.setState(GameState.Win);
}
// SDK发出的app.hide事件监听
private handleHide() {
// 战斗界面onHide上报logLevelHide(游戏通关成功、游戏通关失败、游戏复活中不进行上报logLevelHide打点)
if(!(this.isState(GameState.Win) || this.isState(GameState.Fail) || this.isState(GameState.Relive)))
PCSDK.stat.logLevelHide(this.missionId, {
attr: this.currSelectGun
});
}
// 监听关卡复活成功消息
private handleLevelRelive(){
// 关卡复活成功上报
PCSDK.stat.logLevelRelive(this.missionId, {
attr: this.currSelectGun
});
}
private isState(state: GameState) {
return this.state === state;
}
// 设置状态机
private setState(state: GameState) {
if (this.isState(state)) return;
this.state = state;
let costTime: number; // 关卡消耗时间
let failNum: number; // 关卡失败次数
switch (state) {
case GameState.Win: // 处理成功
// 关卡成功上报
costTime = new Date().getTime() - this.enterTime;
failNum = DataManager.I.LocalModel.getMissionFailNum(this.missionId);
PCSDK.stat.logLevelWin(this.missionId, {
ctime: costTime,
first: failNum ? 0 : 1,
attr: this.currSelectGun,
ext: {
currHp: 100000
}
});
break;
case GameState.Fail: // 处理失败
// 关卡失败上报
costTime = new Date().getTime() - this.enterTime;
failNum = DataManager.I.LocalModel.getMissionFailNum(this.missionId);
PCSDK.stat.logLevelFail(this.missionId, {
ctime: costTime,
first: failNum ? 0 : 1,
attr: this.currSelectGun
});
break;
case GameState.Relive:// 处理复活中
// 弹出复活操作界面
PopWinManager.I.openPopwin(RelivePopwinn);
break;
}
}
}
/**
* 复活界面
**/
exports class RelivePopwinn extends BaseView{
// 复活界面关闭
close(){
super.close();
// 关闭模拟:复活成功,发送复活成功消息
EventCenter.I.emit('level.relive');
}
}
// 游戏状态状态机
enum GameState{
Idle, // 初始状态
Fail, // 失败状态
Win, // 成功通关状态
Relive // 正在复活状态
}
- #### logMerge
PCSDK.stat.logMerge(mergeLv: number): void
定义:游戏二合一合成最高等级上报
参数:
mergeLv: number 必传,二合一合成最高等级
示例:二合一部分,合成最高等级时候上报
// 合成最新等级合成
private handleMergeLastestLv(lastestLv: number){
// 合成最新等级上报
PCSDK.stat.logMerge( lastestLv );
}