如何在 Creator环境下,把sharedCanvas上的内容绘制到主域上屏
在过去的几天一直在研究微信的开放数据域,因为我们的项目也用到了好友排行榜的群排行榜功能,我们的项目是用Cocos Creator开发的,所以最终SharedCanvas上的内容还是要绘制到Creator的环境里,如果用纯webGL的形式绘制,我就得抛弃Creator引擎,那会使我的项目开发变得更加困难; 我研究了一下Creator引擎的代码,他有一个类,叫做cc.Texture2D,表示的是2D纹理,这个类,有一个方法叫作initWithElement,源代码如下: [代码]/**[代码][代码] [代码][代码]* Init with HTML element.[代码][代码] [代码][代码]* @method initWithElement[代码][代码] [代码][代码]* @param {HTMLImageElement|HTMLCanvasElement} element[代码][代码] [代码][代码]* @example[代码][代码] [代码][代码]* var img = new Image();[代码][代码] [代码][代码]* img.src = dataURL;[代码][代码] [代码][代码]* texture.initWithElement(img);[代码][代码] [代码][代码]* texture.handleLoadedTexture();[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]initWithElement: [代码][代码]function[代码] [代码](element) {[代码][代码] [代码][代码]if[代码] [代码](!element)[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]this[代码][代码]._image = element;[代码][代码] [代码][代码]this[代码][代码].width = element.width;[代码][代码] [代码][代码]this[代码][代码].height = element.height;[代码][代码] [代码][代码]this[代码][代码].loaded = [代码][代码]true[代码][代码];[代码][代码] [代码][代码]}[代码]意思是,2D纹理,可以通过图片或canvas进行初始化,我写了一段测试代码如下: [代码]var[代码] [代码]openDataContext = wx.getOpenDataContext();[代码][代码] [代码][代码]var[代码] [代码]sharedCanvas = openDataContext.canvas;[代码][代码] [代码][代码]sharedCanvas.width = 512;[代码][代码] [代码][代码]sharedCanvas.height = 2048;[代码] [代码] [代码][代码]//发送消息通知开放数据域,生成sharedCanvas[代码][代码] [代码][代码]openDataContext.postMessage({[代码][代码] [代码][代码]method:[代码][代码]'showGroupRank'[代码][代码],[代码][代码] [代码][代码]pageIndex: 1[代码][代码] [代码][代码]});[代码] [代码] [代码][代码]var[代码] [代码]texture = [代码][代码]new[代码] [代码]cc.Texture2D();[代码] [代码] [代码][代码]var[代码] [代码]main = [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]texture.initWithElement(sharedCanvas);[代码][代码] [代码][代码]texture.handleLoadedTexture();[代码][代码] [代码] [代码] [代码][代码]this[代码][代码].rankSprite.spriteFrame = [代码][代码]new[代码] [代码]cc.SpriteFrame(texture);[代码][代码] [代码][代码]};[代码] [代码] [代码][代码]setTimeout(main, 1000);[代码] 运行了一下,居然能够正常输出sharedcanvas的内容,到此为止,终于把sharedcanvas与Cocos Creator的通道打通。 在之前我尝试过webGL的方式,在主域上屏绘制,遇到了不少问题,也请教了微信官方的开发人员,提到了不少帮助,在此表示感谢!