收藏
回答

小游戏在获取关系链时遇到无法显示sharedCanvas的情况

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小游戏 Bug wx.getOpenDataContext 工具 6.6.5 1.02.1803210
// 点击分享按钮
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

最后一次编辑于  2018-03-24
回答关注问题邀请回答
收藏

23 个回答

  • 杨志鹏 Victor
    杨志鹏 Victor
    2018-05-18

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

    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 模式阿……

    2018-05-18
    赞同
    回复
  • 刘彬
    刘彬
    2018-03-30

    @田顺建  是的

    2018-03-30
    赞同
    回复
  • 田顺建
    田顺建
    2018-03-30

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

    2018-03-30
    赞同
    回复
  • 许敬
    许敬
    2018-03-29

    @白开水 明白你的意思了

    2018-03-29
    赞同
    回复
  • 刘彬
    刘彬
    2018-03-29

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

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

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

    2018-03-29
    赞同
    回复
  • 刘彬
    刘彬
    2018-03-29

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

    2018-03-29
    赞同
    回复
  • 白开水
    白开水
    2018-03-29

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

    2018-03-29
    赞同
    回复
  • 许敬
    许敬
    2018-03-29

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



    2018-03-29
    赞同
    回复
  • 许敬
    许敬
    2018-03-29

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

    2018-03-29
    赞同
    回复
  • 白开水
    白开水
    2018-03-29

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

    2018-03-29
    赞同
    回复

正在加载...