cocosCreator 接入QQ排行榜子域中遇到的坑一:label组件的坑(Uncaught TypeError: Cannot read property ‘context‘ of null)

最近在做小游戏多平台接入,从WX平台移植到QQ平台,其他的都还挺顺利的,API基本一样,几乎是只要将wx.改成qq.就行了,

但是在接入排行榜的时候遇到一些坑,特列出如下,希望给掉入这些坑的同行一个参考(我的开发环境是cocosCreator 2.1.0)

坑一:在自域中使用label组件,且使用默认字体时报如下错误:

Canvas.js:60 Uncaught TypeError: Cannot redefine property: clientWidth
    at Function.defineProperty (<anonymous>)
    at new Canvas (Canvas.js:60)
    at HTMLDocument.createElement (document.js:55)
    at Object.get (cocos2d-js-min.a8f43.js:1)
    at Object._getAssemblerData (cocos2d-js-min.a8f43.js:1)
    at r._applyFontTexture (cocos2d-js-min.a8f43.js:1)
    at r._updateRenderData (cocos2d-js-min.a8f43.js:1)
    at r.onEnable (cocos2d-js-min.a8f43.js:1)
    at r.onEnable (cocos2d-js-min.a8f43.js:1)
    at r.invokeOnEnable [as _
### Cocos Creator 微信小游戏 排行榜 子域 显示解决方案 #### 主域配置 为了使排行榜能够在微信小游戏中正常显示,需先在主域中创建并配置用于展示排行榜的节点。具体来说,在场景内新增个节点,并为其添加`WXSubContextView`组件[^3]。 ```javascript // 绑定按钮点击事件处理函数 Btn(e) { if (e.currentTarget.name === "PaihangbangBtn") { if (cc.sys.platform === cc.sys.WECHAT_GAME) { window.wx.postMessage({ message: "show" }); console.log("paihangbang++++show"); this.panel.active = true; } } } ``` 上述代码片段展示了如何通过检测当前平台是否为微信小游戏环境来决定是否执行特定逻辑;当用户点击指定按钮时触发该方法并向子域发送消息请求显示排行榜。 #### 构建与部署 完成开发工作后,按照官方指南中的指示分别对主域和子域项目进行构建设置。对于主域而言,应确保已指定了正确的开放数据域代码目录名;而对于子域,则要将其发布到主项目的相应位置以便集成[^4]。 #### 数据交互 为了让排行榜能够动态更新,还需要定义套有效的通信机制让两个上下文之间可以交换信息。这通常涉及到调用`wx.postMessage()`接口传递自定义的消息对象给对方[^5]: ```typescript public getRank() { wx.postMessage({ event: 'getRank', }); } public setScore(data) { wx.postMessage({ event: 'setScore', data: {"name":"aaa", "value":12345}, }); } ``` 这些API允许开发者轻松地获取最新的排名情况或将新的得分记录提交至服务器端存储起来供后续查询使用。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风堂主人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值