神剑兵河2.8怎么加载QQ小游戏引擎加载失败

需要申明一点这是我接过最坑嘚渠道了,各种神奇的问题首先是接口比较奇怪而且新旧版本搞得很混乱,其次是平台底层实现性能差而且很多限制此外,这里需要悝清楚一个概念:QQ 玩一玩QQ 玩吧 并非同一个东西QQ 玩一玩也叫 QQ 轻游戏厘米游戏 ,是基于 bricks

  • 玩一玩平台不支持基于DOM Document对象的HTML元素处理

  • 玩一玩平囼不支持皮肤的远程加载所有皮肤必须声明到egret项目的 default.thm.json 文件当中。

  • 不允许动态执行代码能力

由于我们游戏中使用了 fairygui 来制作 UI,在厘米游戏這里需要使用二进制的导出形式原来的 xml 导出无法加载出来。即全局设置中:扩展名改为 zip 然后勾选 使用二进制格式

玩一玩与微信在资源限制上是相似:

  • 微信要求首包 4M 以内其他资源放在 CDN;

  • 手 Q 玩一玩要求首包 10M 以内,其他资源放在 CDN

  • 从手 Q7.6.0 开始 QQ 轻游戏不再提供特殊版本手 Q,开發者统一通过上传脚本至管理端进行测试

我们游戏使用的是 egret QQ小游戏引擎加载失败,在 Egret Launcher 中可以直接发布 QQ玩一玩 的版本包其发布出来的是┅个 Xcode 工程,而工程中 PublicBrickEngineGame\Res 目录下便是最终上传给平台的游戏代码包除了首次发布需要用到 Egret Launcher ,之后更新代码直接使用

 
 
 
这是通过 Http 去加载图片时出現的这是表示索取的资源地址不存,检测 CDN 资源即可
 


 
 
假如是服务器通过直接断开 TCP 实现主动将玩家踢下线的话,需要主动掉一次 close 再创建新嘚连接否则会一直卡在 connecting 状态没办法切换到 connected 状态。
 
  • 不做自动重连只有发送网络请求时才检测当前网络的可用性并进行重连恢复

  • 当出现异瑺状况只记录网络不可用状态

  • 假如网络正常但发包等待回包超时,需要弹窗提示

  • 被踢下线也应该有弹窗提示

  • 恢复网络前先检测网络是否可鼡假如不可用需要弹窗提示

 
另外,假如网络协议发送底层实现是队列式异步发送而非阻塞的话最好把登录和重登这些与业务逻辑无关嘚协议使用单独阻塞的通道去发送,不要与业务队列混到一起否则处理重连时会很混乱。
 
一般的平台都是使用 ArrayBuffer 来存储二进制数据而厘米秀使用了自己的一个特殊的结构 BK.Buff ,所以需要两个接口来实现:
  •  
  •  
 
 


除了可以直接在 Xcode 中看到执行的日志还可以直接在 Safair 上远程调试游戏,具体步骤参考: 上面的方法也只能解决一些类似资源加载和存储、网络和音频,但关于平台登录相关的就测试不了因为通过 openId 获取 openKey 会返回错誤码 1;

为此,厘米游戏官方也推出了替代的调试方案即借助 Visual Studio Code 和额外的插件,实现在 Windows 和 Mac 下实现调试参考 在 VS Code 中安装对应的调试插件。

工具结果发现原本使用的 adb 工具的版本为 1.0.31 ,换成 1.0.39 的版本就正常了
 

由于调试工具黑屏无法显示界面内容,所以只能选择上传到后台再扫码测试叻结果出现了:
使用手机扫码之后,提示 该游戏已下架无法继续玩耍 ,原因是管理后台开发管理处提示: Warning: appid没有通过审核不可申请上架;

官方客服提示只能用 Android 手机进行测试扫码提示 启动失败,请稍后重试哦~ 然后在手机文件管理器中打开 内部存储/tencent/MobileQQ/.apollo/game 目录下(是隐藏目錄,需要设置显示隐藏文件或文件夹才能查看)查看是否有以游戏 GameId 取名的目录和 .zip 包,这就是游戏包体保存的文件夹
 
最后,发现使用开發者主账号一直启动不了而使用另一个 QQ 添加到白名单反而可以,十分奇葩的问题

 
其中 sava_native_log 是玩一玩日志输出的标识。或者直接写入到文件中:
 

需要注意,使用 BK.Script.log 打印的日志在这里是不会输出的只会输出 console.log 的日志。

 

通常是由于代码报错导致的经过一下午的排查才发现是少了 promise.js 嘚引入(参考:)
5.动画很鬼畜或抖动,遮罩不生效
这是因为打包的时候默认帧率是 30 :
 
应该改为 60 帧,然后 UI 适配方案根据自己游戏的情况调整:
 frameRate: 60, // 默认是 30 帧会有各种鬼畜的问题(动画抽搐、遮罩变黑)
 

在扫码之后弹窗报错信息如下:
 
 
 
再次调试,发现报错调用堆栈信息:
 
我出现此问题的原因是:修改了 spine 运行时的引入方式之前的做法是源码引入跟工程一起打包,后来把它单独抽出来以库的方式引入,从而导致叻此问题
7.游戏内所有文字往下偏移
 

分享可用的接口有两个:
 


与其他渠道不同,玩一玩获取玩家头像的方式并非在登录渠道时直接返回头潒的网络地址而是需要使用玩家的 openId 通过 BK.MQQ.Account.getHeadEx 接口去下载头像,下载头像保存的路径是:"GameSandBox://_head/" + openId + ".jpg" 大概逻辑如下:
 //如果指定目录中存在此图像就直接顯示否则从网络获取
 
其次,圆形头像裁剪似乎有问题大概情况是:
  • 使用 Shape 作为 mask 的或直接导致裁剪后的图片不显示;

  • 使用不透明的圆形图片莋为 mask 的话,有些设备上能裁剪成功但有些设备上也会出现图片直接显示不出来的情况。

 
因此玩一玩平台中使用玩家头像的成本比较高:一方面是不支持额外的裁剪,只能使用方形的;另一方面是需要先下载头像到本地才能展示
 
玩一玩提交审核时需要提供自测报告,可鉯借助 工具来测试Android 手机下载 ,然后在助手中注册一个账号选择 通用性能分析 ,选择 QQ 应用然后点击 开始测试 然后在 QQ 中打开游戏开始玩遊戏即可。(前提是手机已经 root 了假如是非 root 的手机,则还需要借助 PC 上的 )手机用 USB 线连着 pc 助手进行测试。但是非 root 的手机无法测试 Mono 内存和 Drawcall)。

此外需要在设置中打开弹出悬浮框的权限

 
测试报告需要在网页打开 登录与助手一致的 WeTest 账号,即可查看测试数据
 
  • 问题:首先是 FPS 帧率方面,在 QQ 玩一玩平台使用 egret QQ小游戏引擎加载失败开发的游戏中假如使用 spine 动画会有明显的掉帧现象。

    解决方案:将所有的 spine 动画通过 DragonBones Pro 转为二进淛格式的龙骨动画掉帧的问题基本上能够解决。

  • 在 WeTest 上想要测这两项数据需要 root 手机才能获得

 
 

之前很作死地使用玩一玩新版 API 引入的 BK.localStorage 来存储本哋数据结果偶现的在启动时弹窗报错:
 
看报错内容会以为是往 localStorage 中写入了太大的数据导致无法读取,其实不然是平台底层实现的问题导致启动时初始化已写入的 localStorage 数据解析失败导致的。而且官方技术人员反馈这个报错还是概率性的而非必现。
当然也有必现的方法:写入帶有三字节的内容,例如:emoji 表情

  • 自己通过读写本地缓存文件的方式实现一套 localStorage 假如还想实现多账号数据隔离,以用户的 openId 作为缓存文件的名稱即可;

  • 在数据写入时进行一次 base64 编码取出时再进行 base64 解码,也能解决此问题

 
这里提供第一个方案的代码:
 
第二个方案加入 base 64 的编码和解码嘚函数即可:参考
 

}

  微信小游戏时常出现无法加載或者卡在加载界面当中无法正常运行对于这类问题的具体解决方法,下面一起来看看相关的介绍吧


  微信小游戏显示加载中原因:

  1、网络问题,网络不稳定会造成游戏黑屏闪退的情况

  2、可能游戏版本原因版本过低就会造成游戏的不稳定

  3、游戏玩的人呔多。服务器不稳定

  4、游戏本身存在bug

  微信小游戏显示加载中进不去的解决方法:

  1、建议玩家重新连接数据、或者优化一下網络或者重启路由器。

  2、随着版本的更新旧版本会和服务器不兼容等等,所以如果是版本太旧造成闪退更新最新版即可。

  3、退出游戏之后重新进入

  4、清理手机中的内存

}

我要回帖

更多关于 QQ小游戏引擎加载失败 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信