22 BK.QQ 房间手Q消息管理类

优质
小牛编辑
123浏览
2023-12-01

本类用于与手q进行消息交换

调用前请主动加载

方法

notifyHideGame()

通知手q,用户点击了缩小按钮

参数:无 返回值:无

notifyCloseGame()

通知手q,用户点击了关闭按钮

参数:无 返回值:无

notifyReadyGame()

通知手q,游戏即将开始

参数:无 返回值:无

notifyGameTipsWaiting()

通知手q,等待玩家加入

参数:无 返回值:无

notifyGameTipsSomeOneJoinRoom(nick)

通知手q,新玩家加入房间

参数:

参数类型名称备注
nickstring昵称

返回值:无

notifyGameTipsSomeOneLeaveRoom(nick)

通知手q,玩家离开房间

参数:

参数类型名称备注
nickstring昵称

返回值:无

notifyGameTipsPlaying()

通知手q,游戏进行中

参数:无 返回值:无

notifyGameTipsGameOver()

通知手q,游戏已结束

参数:无 返回值:无

inviteFriend(wording)

邀请好友加入游戏。支持手q/微信

参数:

参数类型名称备注
wordingstring文案

返回值:无

checkPubAccountState(puin,callback)

查询是否关注公众号

参数:

参数类型名称备注
puinstring公众号id
callbackfunction回调函数

返回值:无

例子

BK.QQ.checkPubAccountState(pubAccountId ,function(errCode, cmd, data) {
      BK.Script.log(0,0," callback errCode = "+errCode+ " cmd = "+ cmd + " data = "+ data);
      if(data.is_follow == 1){ //1已关注 0未关注

      }
  });

enterPubAccountCard(puin)

进入公众号资料卡

参数:

参数类型名称备注
puinstring公众号id

返回值:无

reqCustomLogic(data,callback)

开放api

参数:

参数类型名称备注
datajson用户数据
callbackfunction回调函数

返回值:无

例子

BK.Script.loadlib('GameRes://qqPlayCore.js');
var data ={"gameid":2003, "data" : {"cmd" : "addex", "itemid" : 2025, "num" : 4}};
BK.QQ.reqCustomLogic(data,function(errCode,cmd,data)
{
BK.Script.log(0, 0, "BK.QQ.reqCustomLogic errCode = " + errCode + " cmd = " + cmd + " data = " + JSON.stringify(data));

})

uploadData(actionName,enter,result,param1,param2,pram3)

数据上报

参数:

参数类型名称备注
actionstring操作id,用来定义操作
enternumber定义操作场景
resultnumber定义操作结果
param1string拓展字段
param2string拓展字段
param2string拓展字段

返回值:无

例子:

BK.Script.loadlib("GameRes://qqPlayCore.js")
var actionName = "actionname"
var enter = 1;
var result = 1;
var param1 = "param111"
var param2 = "param222"
var param3 = "param333"
BK.QQ.uploadData(actionName,enter,result,param1,param2,param3);

getGameItemList(callback)

获取游戏所有道具

参数:

参数类型名称备注
callbackFunction回调函数

返回值:无

例子:

BK.QQ.getGameItemList(function(errCode,cmd,data){
    BK.Script.log(0,0," reveive sso cmd = "+ cmd)
    var itemList = [];
    if(data){
        if(data.data){
            if(data.data.itemList){
                data.data.itemList.forEach(function(element) {
                    var item = {    
                     "id":element.id,               //道具ID 
                     "name":element.name,           //道具名称
                     "consumed":element.consumed,   //是否消耗型【0-非消耗型 1-消耗型】
                     "uinque":element.uinque,       //是否绝版【0-非绝版,1-绝版】
                     "iconUrl":element.iconUrl,     //素材iconurl
                     "curreInfo":element.curreInfo  //价格数组 因支持多货币,每个元素为某种货币的价格
                    //  "curreInfo":[
                    //                     {
                    //                     "curreType":3,    //3-游戏点券 4-二级货币(暂不能用)
                    //                     "price":1000     //价格
                    //                     }]    
                     }
                    itemList.push(item);
                    BK.Script.log(0,0,"id ="+ item.id + " name="+item.name+ " consumed="+item.consumed+" unique="+item.uinque+ " iconUrl="+item.iconUrl + " curreInfo="+item.curreInfo) ;   
                }, this);
            }
        }
    }
})

getUserGameItems(callback)

获取当前用户拥有的游戏道具

参数:

参数类型名称备注
callbackFunction回调函数

返回值:无

例子:

BK.QQ.getUserGameItems(function(errCode,cmd,data){
    BK.Script.log(0,0," reveive sso cmd = "+ cmd)
    var itemList = [];
    if(data){
        if(data.data){
            if(data.data.itemList){
                data.data.itemList.forEach(function(element) {
                                            var item = {
                                                "consumed": element.consumed, //是否消耗型 【0-非消耗型 1-消耗型】
                                                "iconUrl":  element.iconUrl,  //素材iconurl
                                                "id": element.id,             //道具ID
                                                "name": element.name,         //道具名称
                                                "num": element.num            //活动获得道具数
                                            }
                                            itemList.push(item);
                                            BK.Script.log(0,0,"consumed="+ item.consumed + " iconUrl="+item.iconUrl + " id="+item.id + " name="+item.name + " num="+item.num) ;   
                                        }, this);
            }
        }
    }
});

getRoomUserScoreInfo(roomId,callback)

获取房间内的用户成绩数据

参数:

参数类型名称备注
roomIdnumber房间id
callbackFunction回调函数

返回值:无

例子:

var  roomId =  123;      //房间ID
BK.QQ.getRoomUserScoreInfo(data,function(errCode,cmd,data){
     if(data.data){
        var userRank = data.data.userRank;
        for (var idx = 0; idx < userRank.length; idx++) {
            var singleUserRank = userRank[idx];
            var openId = singleUserRank.openId;
            var score  = singleUserRank.score;
            var rank   = singleUserRank.rank;
            //可选
            // var a1 = singleUserRank.a1;
            // var a2 = singleUserRank.a2;
            // ...
            //
        }
     }
});

scoreUpload(scoreData,callback,arkData)

成绩上报

使用场景:玩家中途退出游戏,玩家最终完成游戏,均需要主动上报成绩。

参数:

参数类型名称备注
scoreDataObject请求参数具体属性如下例子
callbackFunction回调函数具体错误码可在 10.20.1 错误码一节查看
arkDataObjectark控制参数手Q 7.3.5新增支持定制化结果气泡界面。如不需要定制,填null/undefined

返回值:无

例子:

var scoreData = [
       {
        //第一个用户的得分
           "openId":"4558665DATRGFGFS455",
           "scoreInfo":{
                "score":4455,   //用户得分  必须上报
                //附加参数,上报和使用都由第三方决定,最多支持5个附加参数,可选
                "a1":1,
                "a2":2,
                 },
            "actInfo":{     //活动数据由第三方配置定义,key值统一用p1,p2,...此数据只用于活动,不会保存到用户的房间数据里, 现支持最多支持16个
                     "p1":1,    //参数0
                     "p2":5,    //参数1
                },
       },
    {
            //第二个用户的得分
           "openId":"SDJIIWJIEQWJ232389DA",
           "scoreInfo":{
                "score":4455,   //用户得分  必须上报
                //附加参数,上报和使用都由第三方决定,最多支持5个附加参数,可选
                "a1":1,
                "a2":2,
                 },
            "actInfo":{     //活动数据由第三方配置定义,key值统一用p1,p2,...此数据只用于活动,不会保存到用户的房间数据里, 现支持最多支持16个
                     "p1":1,    //参数0
                     "p2":5,    //参数1
                },
    }
    //第n个用户的得分 ...
];


//735新加,支持各模式玩游戏
var arkData = {
    /**模式一**/
    "pkMode":1,                    //pk模式 1-PVP  2-PVE
    "wording":"胜利",             //结果展示wording
    "groupInfo":
    [
        {
        "rank":1,                     //组排名,如有并列第一的则两组的rank都是1
        "openIds":["4558665DATRGFGFS455","SDJIIWJIEQWJ232389DA"],         //组成员openId
        "grpWording":                       //组 wording,可选
        [
        ["得分","123","分" ],
        ["用时","123","秒" ],
        ["杀怪","123" ],
        ]
        }
        ]
}
BK.QQ.scoreUpload(scoreData,function(err,cmd,data){
    //errCode ,0表示成功其他为异常
    //data = {}
},arkData);

shareToMQQ(title, summary, detailUrl, picUrl)

分享游戏至手Q

需要注意的是,此函数并非邀请好友进入游戏,仅是将游戏detailUrl分享出来。

其中detailUrl需游戏方自己提供,建议是该款游戏的介绍页

参数:

参数类型名称备注
titlestring标题
summarystring分享内容
detailUrlstring跳转详情url游戏方提供
picUrlstring图片url游戏方提供

返回值:无

以迪斯尼过马路中的分享为例,具体参数对应的显示如下,点击后,将跳转至 detailUrl对应的地址

例子:

BK.QQ.shareToMQQ("迪斯尼过马路战绩","我获得了第1名,快来挑战我","www.xxx.com","xxx.com/xx.png");

getCmshowDressInfo(openId,callback)

获取厘米秀形象数据

参数:

参数类型名称备注
openIdstring待获取人的openid

返回值:无

例子:

//根据openId 获取厘米秀装扮
BK.QQ.getCmshowDressInfo(GameStatusInfo.openId,function(errCode,cmd,data){
    BK.Script.log(0,0,"cmd = "+ cmd + " data = " + data);
    if(errCode == 0){
        var jPath = BK.Script.pathForResource(data.skltPath.atlas, 'json');
        var aPath = BK.Script.pathForResource(data.skltPath.json, 'atlas'); 
        var ani =new BK.SkeletonAnimation(aPath, jPath, 1,null,null,null );
        for (var i=0;i<data.dressPath.length;i++)
        {
            var j = data.dressPath[i].atlas;
            var a = data.dressPath[i].atlas;
            var jPath = BK.Script.pathForResource(j, 'json');
            var aPath = BK.Script.pathForResource(a, 'atlas');
            ani.setAccessory(jPath, aPath);
        }
        ani.position = {x:100,y:100};
        BK.Director.root.addChild(ani);
    }
});

getUserCurrencyInfo(currencyType,callback)

查询用户货币余额

参数:

参数类型名称备注
currencyTypenumber货币类型1- 请求获取游戏点券 2-请求获取游戏二级货币(暂不可用)
callbackFunction回调具体参数如下例子

例子:

BK.QQ.getUserCurrencyInfo(1,function(errCode,cmd,data){
    if(errCode == 0){
        for(var i = 0 ; i < data.data.curreInfo.length; i++){
            var curr = data.data.curreInfo[i];
            var type = curr.curreType  //3- 游戏点券 目前只有一个3值
            var bal  = curr.balance    //用户拥有的该货币数量
        }
    }
});

listenGameEventEnterBackground

监听游戏退到后台事件

手Q进入后台后回调,如按home键退到后台

参数:

参数类型名称备注
objobject事件绑定的对象
callbackFunction回调具体参数如下例子

例子:

var obj = {};
BK.QQ.listenGameEventEnterBackground(obj,function(){
    //
})

listenGameEventEnterForeground

监听游戏回到前台

参数:

参数类型名称备注
objobject事件绑定的对象
callbackFunction回调具体参数如下例子

例子:

var obj = {};
BK.QQ.listenGameEventEnterForeground(obj,function(){
    //
})

listenGameEventMaximize

监听游戏界面最大化

场景:用户缩小游戏后,再次点游戏栏回到游戏

参数:

参数类型名称备注
objobject事件绑定的对象
callbackFunction回调具体参数如下例子

例子:

var obj = {};
BK.QQ.listenGameEventMaximize(obj,function(){
    //
})

listenGameEventMinimize

监听游戏界面最小化

场景:用户点击缩小游戏

参数:

参数类型名称备注
objobject事件绑定的对象
callbackFunction回调具体参数如下例子

例子:

var obj = {};
BK.QQ.listenGameEventMinimize(obj,function(){
    //
})

sendGameMsg()

开放api

注意用法:

使用前提是游戏不需要在加入房间时自动发消息,需要在特定逻辑中单独调用发消息的场景。

此函数是用于在加入房间后,发出游戏消息。发出的是有状态的消息,其他玩家点击消息可以进入发消息的这个房间中一起游戏。并且与queryAndJoinRoom接口的发消息是不能同时调用的。

参数:

参数类型名称备注

返回值:无

例子

//加入房间成功后
BK.QQ.SendGameMsg()

BK.QQ.shareToArk(roomId, summary, picUrl, isSelectFriend, extendInfo)

分享带自定义数据以及图片的消息气泡至聊天窗

其他用户点击此消息气泡后,带上自定义的消息启动游戏。

参数说明:

参数类型名称备注
roomIdnumber房间id如使用BK.Room房间逻辑,可填入对应roomId,如开发者自建房间,填0
summarystring分享wording
picUrlstring图片的网络链接
isSelectFriendboolean选择好友为true则跳出选择好友的列表
extendInfostring扩展信息开发者可自定义该信息,用与传输参数

例子:

BK.QQ.shareToArk(0, 'wording', 'http://i.hudongcdn.com/8b4e1c52e5a1b88b42ae510d4a17187c2003_20180326.png', true, 'extendInfo');

BK.QQ.shareToArkFromFile(roomId, summary, extendInfo, path)

分享将本地径下的图片以及自定义数据图片的消息气泡至聊天窗

与BK.QQ.shareToArk相似,与其不同的是本接口分享的图片来自游戏本地路径

需要引用qqPlayCore.js

参数说明:

参数类型名称备注
roomIdnumber房间id
summarystring分享wording
extendInfostring扩展信息开发者可自定义该信息,用与传输参数
pathstring图片的本地路径

例子:

BK.QQ.shareToArkFromFile(1, 'wording', 'extendInfo', 'GameRes://resource/texture/test.png');

BK.QQ.shareToArkFromBuff(roomId, summary, extendInfo, buff)

将BK.Buffer中的图片内容分享至聊天窗

与BK.QQ.shareToArk相似,与其不同的是本接口分享的图片来自图片装有图片数据的BK.Buffer对象

需要引用qqPlayCore.js

参数说明:

参数类型名称备注
roomIdnumber房间id
summarystring分享wording
extendInfostring扩展信息
buffobjectBK.Buffer对象

例子:

var buff = BK.FileUtil.readFile("GameRes://resource/texture/monster.png");
BK.QQ.shareToArkFromBuff(1, 'wording', 'extendInfo', buff);

BK.QQ.shareToArkFromNode(roomId, summary, extendInfo, node)

将某个节点进行截屏后,分享至聊天窗

与BK.QQ.shareToArk相似,与其不同的是本接口分享的图片来自如渲染树的某个节点

需要引用qqPlayCore.js

参数说明:

参数类型名称备注
roomIdnumber房间id
summarystring分享wording
extendInfostring扩展信息
nodeobjectBK.Node对象

例子:

// 先在屏幕上添加Node并确保待上传的Node已完成渲染
var tex = new BK.Texture('GameRes://resource/texture/test.png');
var node = new BK.Sprite(500, 500, tex, 0, 1, 1, 1);
BK.Director.root.addChild(node);
......
BK.QQ.shareToArkFromNode(1, 'wording', 'extendInfo', node);

注意:如果使用BK.Room则需要填roomId。如果自建房间体系则填0。

consumeItems(itemlist,callback)

开放api 分享无状态ark消息

参数:

参数类型名称备注
itemlistArray消耗的道具数组
callbackfunction回调

返回值:无

例子

var itemlist = [
    {
        "id":1,    //道具id
        "num":1,   //数量
        "seq":"12312"//用于标识当前消耗的序列号。开发者可自定义
    },                
    {
        "id":2,    //道具id
        "num":1,   //数量
        "seq":"12312"//用于标识当前消耗的序列号。开发者可自定义
    }
]
BK.QQ.consumeItems(itemlist,function(errCode,succList,failList){
if (errCode == 0) {
    for(var i = 0 ; i<succList.length; i++ ){
        //消耗成功的item
        var succItemInfo = succList[i];
       var id = succItemInfo.id; //道具ID
    }
    for(var i = 0 ; i<failList.length; i++ ){
        //消耗失败的item
        var faldItemInfo = failList[i];
        var ret = faldItemInfo.ret; //失败返回码
        var id = faldItemInfo.id; //道具ID
    }
}
})

rollbackGameItems(itemlist,callback)

道具回滚

当因网络、游戏逻辑需要等原因需要将已消耗的道具进行回滚,恢复到未消耗状态,可以使用本接口。

用法:传入对应消耗的道具id消耗时对应的流水号seq,即可回滚某次消耗

参数:

参数类型名称备注
itemlistArray消耗的道具数组
callbackfunction回调

返回值:无

例子:

var itemlist = [
    {
        "id":1,    //道具id
        "num":1,   //数量
        "seq":"12312"//消耗的流水号
    },                
    {
        "id":2,    //道具id
        "num":1,   //数量
        "seq":"12312"//消耗的流水号
    }
]
BK.QQ.rollbackGameItems(itemlist,function(errCode,succList,failList){
    if (errCode == 0) {
        for(var i = 0 ; i<succList.length; i++ ){
            //回滚成功的itemid
              var succItemInfo = succList[i];
            var id = succItemInfo.id; //道具ID
        }
        for(var i = 0 ; i<failList.length; i++ ){
            //回滚失败的item
            var faldItemInfo = failList[i];
            var ret = faldItemInfo.ret; //失败返回码
            var id = faldItemInfo.id; //道具ID
        }
    }
})

fetchOpenKey(callback)

获取openKey

获取用户开发者自建后台与QQ轻游戏后台鉴权的密钥openKey

参数:

参数类型名称备注
callbackfunction回调

返回值:无

例子:

BK.QQ.fetchOpenKey(function (errCode, cmd, data) {
    if (errCode == 0) {
        var openKey = data.openKey;
    }
});

getRankList(callback)

获取排行榜

参数:

参数类型名称备注
callbackfunction回调

返回值:无

例子:

BK.QQ.getRankList(function (errCode, cmd, data) {

    BK.Script.log(1, 1, "getRankList demo callback  cmd" + cmd + " errCode:" + errCode + "  data:" + JSON.stringify(data));
    if(data)
    {
      var rankList = data.data.rankList;
      for(var i=0;i<rankList.length;i++){
             var rankNode = rankList[i];
          BK.Script.log(1, 1, "rankList i:" + i + 
          " nick:" + rankNode.nick +  //昵称
          "  head:" + rankNode.head + //头像url
          " accPoint:"+rankNode.busData.accPoint) //积分
      }
    }
});

skipGame(desGameId, extendInfo)

跳转至其他游戏

参数:

参数类型名称备注
desGameIdnumber跳转的游戏id
extendInfostring额外参数,必须为字符串

返回值:无

例子:

var desGameId = 1234; //跳转的gameid,必须为数字
var extendInfo = ""; //额外参数,必须为字符串
BK.QQ.skipGame(desGameId, extendInfo)

createShortCut(extendInfo)

Andriod下 发送游戏快捷方式到桌面。iOS不支持

参数:

参数类型名称备注
extendInfostring额外参数,必须为字符串

返回值:无

例子:

var extendInfo = ""; //额外参数,必须为字符串
BK.QQ.createShortCut(extendInfo)