小游戏在获取关系链时遇到无法显示sharedCanvas的情况
发布于 6 年前 作者 jun87 8625 次浏览 来自 问答
// 点击分享按钮
shareClicked:function() {
    if (cc.sys.platform === cc.sys.WECHAT_GAME) {
 
        var openDataContext = wx.getOpenDataContext()
        var sharedCanvas = openDataContext.canvas
 
        if (sharedCanvas) {
            cc.log ("分享的面板存在")
        }
 
        var canvas = wx.createCanvas()
        var context = canvas.getContext('2d')
        context.drawImage(sharedCanvas, 0, 0)
 
        cc.log ("微信分享")
    }
},

在使用cocos creator开发小游戏时,需要获取些用户信息来制作排行版,根据提供的 https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/open-data.html?t=2018323 中的教程,主域和开放数据域的相关配置已经配置完成,但最后需要调用时却给出这样的提示:

An unsecure canvas can’t take an secure canvas as arugment of drawImage When using subcontext

10 回复

@白开水 明白你的意思了

@白开水,好的,我试下,不过还有一个比较尴尬的事,就是sharedCanvas,的尺寸是在开放数据域里是只读的,不能修改,而且就是屏幕的尺寸,但是webGL1.0要求,纹理尺寸必须是2的幂,我只能在主域绘制sharedCanvas之前修改它的尺寸,这样一来,就算能绘制出来,也会变形的。。。。。。。。。这个何解!

{“errMsg”:“getUserCloudStorage:ok”,“KVDataList”:[{“key”:“score”,“value”:“9”}]}

{“errMsg”:“getFriendUserGameData:fail 系统错误,错误码:-2”}

@白开水, 个人数据取得到,好友数据取不到,请问这个系统错误码-2具体是什么原因呢?

@许敬,power-of-2 的解决方案,请直接搜索相关资料,这是 WebGL 自身的特性,与小程序无关。另外你在另一个帖子里的代码在将 sharedCanvas 上屏之前重设了 sharedCanvas 的宽高,重设 canvas 是会将 canvas 清空的。所以你得到了一个黑块。建议将设置 sharedCanvas 宽高的代码放到一开始去执行。

@白开水,我刚才试了,还不显示不出内容,如图,中间的黑块就是绘制的sharedCanvas的内容,什么也显示不出来,我觉得还是官方出一份详细事例代码,也不用大家都自己去试,老是问。

@刘彬 你现在的做法是cocos构建的时候,选择渲染模式:canvas,然后在代码里用requestAnimationFrame不停的绘制sharedCanvas吗

整理一下,所以应该是这样吗?

let openDataContext = wx.getOpenDataContext();
let sharedCanvas = openDataContext.canvas;
 
let canvas = cc.game.canvas;
let context = canvas.getContext('webgl');
context.drawImage(sharedCanvas, 0, 0);

但是这样的话我会报错:

cc.game.canvas.getContext(…).drawImage is not a function TypeError: cc.game.canvas.getContext(…).drawImage is not a function

而且我用了 Cocos Creator 的 camera 没办法不用 webgl 模式阿……

@白开水 谢谢大佬,终于能画出来了。

@许敬,尝试用 requestAnimationFrame 的方式不断地将 sharedCanvas 以 gl 绘图方式绘制到上屏 canvas 上

回到顶部