1.1.2.框架与生命周期

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

调用代码

bricks引擎代码包含原生以及js层部分,旧版本开发者引用protocol.js来进行引擎js层接口的引用。新的开发者推荐使用qqPlayCore.js文件进行引用。单独引用protocol.js的方法也可以正常使用。

protocol.js为qqPlayCore.js的子集,除此外qqPlayCore.js还包含webscoket.js、Game.js等文件。

BK.Script.loadlib('GameRes://script/core/net/protocol.js');

新(推荐)

BK.Script.loadlib('GameRes://qqPlayCore.js');

游戏配置

游戏包中必须含有gameConfig.json文件,用于进行游戏横竖屏、H5游戏url等整体配置。json内容如下例

说明备注
viewMode控制横竖屏状态1.竖屏 2.左横屏(home键在左边)3.右横屏(home键在右边)
enterUrlH5游戏入口urlH5游戏填写,非H5游戏不填

例子

{
    "viewMode":2,
    "enterUrl":""
}

UI处理

统一框架UI有横屏&竖屏模式,需要开发者如下处理

  • 7.5.8及以上版本,去掉游戏自己的关闭&缩小按钮,并根据统一的关闭缩小按钮的位置对游戏UI做相应处理

游戏事件以及生命周期

开发者使用BK.Game类可以后可以监听整体游戏生命流程。

BK.Game中的游戏内事件

onLoad

程序启动事件。游戏脚本加载完成后,进到此处

onMinmize

最小化事件,用户点击"收起游戏"

onClose

游戏关闭事件。用户点击右上角"关闭"图标,关闭游戏

开发者需处理销毁动作:上报用户成绩

onEnterBackground

退后台事件。用户按home键将手Q退至后台。

onEnterForeground

回到前台事件。手Q进程从后台回到前台。

onShare

分享事件。用户点击 “分享游戏”后触发。

手Q 7.6.5 后支持分享多渠道,开发者可自定义分享的数据

多渠道分享指 开发者可以通过返回特定类型的数据,达到自定义分享数据的效果 通过返回带有特定字段的数据

字段类型说明
summarystring分享至QQ中,聊天窗气泡-标题
picUrlstring分享至QQ中,必须为url,聊天窗气泡-图片
extendInfostring分享至QQ中,必须为string,用于聊天窗气泡-额外信息
localPicPathstring分享图片,必须为GameRes://或GameSandBox://为前缀。用于分享至 空间、微信、朋友圈

本分享与BK.QQ.Share相同,具体查看此处

分享成功/失败后,触发onShareComplete函数

onShareComplete

分享结果事件。返回分享结果。

onNetworkChange

网络环境切换事件。网络环境进行切换时会触发本事件

具体state的取值标识不同的切换情况。取值如下

取值说明
1无网络到蜂窝网络
2无网络到wifi
3蜂窝网络到wifi
4蜂窝网络到无网络
5wifi到无网络
6wifi网络到蜂窝网络

onException

全局js异常/错误

new BK.Game({
....

onException:function(app){
   //app.errorMessage为错误信息,app.errorStacktrace为堆栈信息
    BK.Script.log(1, 0, "msg = " + app.errorMessage() + ", stack = " + app.errorStacktrace());
}
});

代码实例: Res/script/demo/GameDemo.js(需bitbucket权限)

游戏呼起入口

在手Q中,游戏可能会在不同的入口中被呼起,开发者通过GameStatusInfo.src 参数处理用户打开游戏时体验。

大多数情况情况直接打开游戏大厅即可,在少数情况需特殊处理(聊天界面消息)</font>

实例代码如下

var SRC_AIO_BUBBLE_NORMAL = 200, //聊天窗游戏消息
var SRC_AIO_BUBBLE_SHARE = 201, //分享消息


var src = GameStatusInfo.src;
//聊天窗游戏消息
if (src == 200 /* SRC_AIO_BUBBLE_NORMAL */) {
    //
    var room = new BK.Room();
    var roomId = GameStatusInfo.roomId;
    var gameId = GameStatusInfo.gameId;
    var openId = GameStatusInfo.openId;
    //从聊天入口进入游戏,优先加入房间,如加入房间失败,则跳转至游戏大厅
    room.queryAndJoinRoom(gameId, roomId, openId, function (statusCode, room) {
        if (statusCode == 0) {
            //正常加入房间
        }
        else {
            //跳转至游戏大厅
        }
    };
}
//聊天面板中的大厅与 动态-玩一玩入口的 可以统一进入游戏主页
else {
    //加载游戏主页
}

GameStatusInfo.src 其他取值

场景值(src)场景描述
100厘米秀AIO面板点击打开游戏200
110AIO消息流文字识别
200点击AIO游戏邀请消息(带房间信息)
201点击AIO游戏分享消息
204在微信点击游戏邀请后打开手Q后打开游戏
207游戏城任务红包tab
210厘米秀互动页打开游戏
220手Q扫二维码后打开游戏,没有中间的h5页面
221外部业务打开游戏
222从安卓桌面打开游戏
223从厘米岛打开游戏
225从热玩打开游戏
226通过列表+号打开游戏
228任务中心完成任务打开游戏
229手Q扫描后先打开h5页面,然后h5页面打开游戏
230用户通过微信扫描二维码打开轻游戏
233新版游戏城打开游戏
301从QQ动漫打开游戏
302从A游戏打开B游戏
310从空间玩吧打开游戏
311从厘米秀运营活动页面打开游戏
312手机QQ游戏中心页面打开游戏
314从企鹅电竞手Q结合版打开游戏
315从B2C红包H5页面打开游戏
316从企鹅电竞独立版APP打开游戏
317AIO轻游戏加号入口打开游戏
318一起玩中,从h5打开游戏
318001一起玩机器人模式启动游戏
318002一起玩中开心玩入口启动游戏
319一起玩中,从客户端打开游戏
320从QQ钱包入口打开游戏
321AIO气泡打开游戏
322从广告链接打开游戏
323抽屉页厘米小人Tips红点直接拉起游戏
324手Q公众号打开游戏
324001手Q公众号打开游戏,特指QQ玩一玩服务号
324002手Q公众号打开游戏,特指QQ厘米秀服务号
325游戏盒子打开游戏
326手Q搜索打开游戏
327从钱包推广页面打开游戏
328从平台游戏红包活动页面打开游戏
329开胶囊时打开游戏
330一起玩中,更多玩法打开游戏
332从腾讯新闻打开QQ轻游戏
333001从AIO动作小尾巴打开游戏
333002动作内启动游戏
334浏览器中打开游戏
334001浏览器空白页打开游戏
335QQ运动页面打开游戏
888临时渠道,不需要特别关注
103从AIO发起陌生人入口打开游戏(已废弃)
108AIO面板点击大面板小房子按钮(已废弃)
202热聊folder中点击进入游戏按钮(已废弃)
203热聊顶部bar204(已废弃)
205web pk某个好友/拉起选择器后选择某个好友(已废弃)
208新版玩一玩WEB页面打开游戏(已废弃)
209老版游戏城WEB页面打开游戏(已废弃)
224争霸赛活动页打开引力球游戏(已废弃)
313从手机QQ服务号打开游戏(已废弃)