微信小游戏在上屏(主屏)绘制sharedCanvas失败 无法实现排行榜功能

在根据官方文档实现排行榜功能时,
官方文档: https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/open-data.html?t=2018323

做到这一步没有问题
let odc = wx.getOpenDataContext();
odc.postMessage({… });
let sharedCanvas = odc.canvas

做到这一步出现了问题
var context = cc.game.canvas.getContext(‘2d’);
context.drawImage(sharedCanvas, 0, 0)

问题在于getContext函数,错误是
TypeError: Cannot set property ‘proto’ of null
at HTMLCanvasElement.n.getContext (WAGame.js:8)

这个原函数是:
function (e,t){if((0,f.getCanvasConfig)(this).isSharedCanvas&&GameGlobal.__isSubContext)return null;var n=i.call(this,e,t);return/2d|webgl/.test(e)&&(n.proto=b(e)),g.set(n,this),Object.defineProperty(n,“canvas”,{value:this,configurable:!1,writeable:!1}),n}

此外我试了一下,只要在main.js里面,不启动cocos主程序,即删除 cc.game.run(option, onStart);这一行,就不会有问题,可以在屏幕上绘制sharedCanvas里面的内容。

所以我觉得,应该是cocos占用了主canvas。另外其实即使我能在主canvas上绘制sharedCanvas也没有办法实现排行榜功能。因为新绘制的内容会立刻被cocos底层的渲染逻辑覆盖掉。

请问官方能不能提供一个绘制sharedCanvas到主屏,或者绘制sharedCanvas到一个sprite上的方法?

1赞

我也在思考这个问题 官方说后续版本会支持

原因是你build的时候渲染模式是选择的WebGL,所以canvas.getContext(‘2d’)是取不到的,应该是canvas.getContext(‘webgl’)

mark

全局的canvas 根本就有没有getContext方法,我也是很苦恼上屏canvas没法像微信小游戏api那样使用,而且在开放数据域使用不了cocos2d的任何api。

我也碰到这个问题了,根本用不了getContext, 我的项目一定要用camera,所以只能用webgl模式的,怎么搞?

我也在追这个问题,mark一下

请问你是如何将排行榜的内容绘制到sharedCanvas上的?方便给个demo吗?

同求解决方案啊!~~~

1赞

我也求,你解决了吗