cocoscreator截屏分享

背景

公司是做电商的,新年将近,运营部预模仿某宝集福卡模式出一款集福卡小游戏,由H5游戏开发人员(也就是本人)完成并提
供游戏入口链接交由运营人员配置。其中不免会涉及到分享功能,链接分享和海报分享。由于公司之前没有往app中内嵌过
H5类型小游戏,原生这边留下的图片分享是针对于H5网页的,我这边在接入截屏分享的时候则出现了白屏的情况,界面上的图像和文字资源没有截取到一点(除了调试模式下的那个VConsole绿色标志和标题)。经过两天的论坛摸索,发现原生那边的方法在截取屏幕元素时,只能截取浏览器canvas画布上的直接子元素,而通过引擎制作的各种画面元素则无法获得(原因未知)。知道了问题源头,找到如下解决方法。

解决方法

在creator构建发布后的入口index.html文件中加入如下子元素:

  <div id="shareDiv" style="display: flex;justify-content: center;align-items: center;position: fixed;top: 0;bottom: 0;right: 0;left: 0;margin: 0 auto;"><img id="shareImg" style="width:10px;height: 10px;" src="" /></div>

并在下方的function方法中隐藏该节点:

document.getElementById('shareDiv').style.display = 'none';

截图如下:

截图方法:

/*** 截屏* @param {*摄像机 cc.Camera类型} camera */screenShot(camera){let canvas = null;//第一步------>给摄像机指定渲染目标 不直接渲染到屏幕上let texture = new cc.RenderTexture();texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height, cc.gfx.RB_FMT_S8);camera.targetTexture = texture;//第二步----->创建并渲染画布let width = texture.width;let height = texture.height;if(canvas == null){//创建canvascanvas = document.createElement('canvas');canvas.width = width;canvas.height = height;}else{//清理画布上指定矩形区域内的像素canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);}//返回值 ctx 一个 CanvasRenderingContext2D 对象,使用它可以绘制到 Canvas 元素中。let ctx = canvas.getContext('2d');//手动渲染一次摄像机camera.render();//readPixels 方法 从 render texture 读取像素数据let data = texture.readPixels();//把从摄像机读取的像素 渲染到canvas画布上去let rowBytes = width * 4; for (let row = 0; row < height; row++) {let srow = height - 1 - row;let imageData = ctx.createImageData(width, 1);//创建新的空白 ImageData 对象let start = srow * width * 4;for (let i = 0; i < rowBytes; i++) {imageData.data[i] = data[start + i];}ctx.putImageData(imageData, 0, row);//将图像数据拷贝回画布上}//第三步------>把画布显示在屏幕上document.getElementById('shareDiv').style.display = 'block';let shareImg = document.getElementById('shareImg');shareImg.style.width = '100vw';shareImg.style.height = '100vh';//toDataURL 方法 将当前画布的内容作为图像返回let dataURL = canvas.toDataURL('image/png');shareImg.src = dataURL;// console.log('shareImg==>', shareImg);},

分享后回调一定要有这一句代码:

//隐藏截屏图片
document.getElementById('shareDiv').style.display = 'none';

备注:
这个解决方法大体思想是,在要截屏的节点下面添加一个摄像机组件,要截屏的时候摄像机手动渲染一次,然后把摄取到的像素信息提取出来放入到shareImg元素中再调用原生的截屏方法去截取捕获屏幕信息,截屏分享结束后再把shareImg元素隐藏起来即可。当然,每个人遇到的情况都不一样,希望该文档对你有那么一丢丢的启发,文章内的错误理解之处欢迎指出。

cocoscreator截屏分享相关推荐

  1. iOS端如何实现带UI截屏分享

    下载资源文件 1.1 需要开发者 点击这里 来下载分享的demo 1.2 需要 点击这里 下载SDK 导入SDK以及相关文件需要导入下载的SDK资源文件以及UI截屏所需要的6个文件,如下图: 注意:在 ...

  2. Android截屏分享

    最近项目需要实现Android截屏分享功能,包括Android截屏获取图片.将图片保存到本地.通知系统相册更新.通过微信.QQ.微博分享截屏图片,本篇博客作为总结回顾. 一.Android截屏获取图片 ...

  3. iOS截屏分享功能实现

    产品经理今天提出一个新的需求,需要实现类似于每日优鲜.淘宝等客户端的截屏分享的功能,即home+power截屏后弹出分享页面,同时将截取到的图片放在当前页面中展示,如下效果: 之前没有做过这样的需求, ...

  4. ios android 截屏 分享,iOS 系统自带截屏分享

    分享一篇iOS系统自带截屏分享 使用方案 UIImage *image = [KJTools kj_shareWithHideBlock:^bool{ /// 隐藏不需要截图的区域 return YE ...

  5. iOS 系统自带截屏分享

    分享一篇iOS系统自带截屏分享 使用方案 UIImage *image = [KJTools kj_shareWithHideBlock:^bool{/// 隐藏不需要截图的区域return YES; ...

  6. 微信截屏分享、图片压缩处理!

    情景 项目当中需要截取当前屏幕图片,然后处理分享到微信朋友或朋友圈.微信分享图片需要设置一张不超过32K大小的缩略图,超过32K将导致分享失败.功能是已经上线,过程中有些细节和注意的地方,在这里分享下 ...

  7. android 新浪财经截屏分享,QQ浏览器HD 2.2:独创截屏分享至微博

    近日,腾讯发布了QQ浏览器HD(aPad)2.2,最大特色是网页拉取速度提升20%,上网更流畅;同时,还推出"截图"插件,是目前首个支持截图的aPad浏览器,用户还可以将截图分享至 ...

  8. 直接在屏幕上,选取区域进行截屏分享到QQ、微信

    在手机屏幕上,选择某个区域进行截屏. 1,借用网络上一张图片,说明每个点的位置,主要是左上角和右下角这两个点.中间那块浅蓝色的就是我们的目标区域了 /*** 将一个view保存成图片* @param ...

  9. ios android 截屏 分享,iOS微信截屏分享

    1.需求:將截屏后的圖片分享至微信好友或朋友圈. 2.問題:1.圖片縮略圖太大無法分享:2.分享的圖片不夠清晰. 3.描述:微信分享是需要設置兩張圖:需分享圖的縮略圖(大小有限制)和需分享的圖(要求高 ...

最新文章

  1. Let's Encrypt 免费SSL配置
  2. 5分钟教你写出一份完美的PRD文档(附案例)
  3. 两台centos之间免密传输 scp
  4. cf方框透视易语言代码怎么写_易语言真的那么不入流吗?
  5. python基础入门(3)之字符串
  6. Agile: 为什么要使用 scrum 而不是瀑布?
  7. 自定义控件的构建(10)
  8. 摄像头 保存到外网服务器_直播平台搭建千万不要忽略流媒体服务器的存在
  9. 字符串内置方法 第二弹
  10. c语言必背100行代码编程入门教学,(完整版)c语言初学必背代码.docx
  11. Typora免费版,不是破解版,是没有升级的老版本,用的还是比较舒服的
  12. 5G移动通信发展历程
  13. IOS 发展史各个ipone的发布时间(二)
  14. BPDU网桥协议数据单元和STP生成树协议
  15. 愚人节巧用CSS开个极客式玩笑以chrome为例
  16. python 提取pdf格式电子发票并改名
  17. 微软发布InstaLoad电池技术 不考虑极性
  18. 递归找到节点后跳出递归循环
  19. addons软件下载_addons制作器最新版
  20. 2022年化工自动化控制仪表最新解析及化工自动化控制仪表免费试题

热门文章

  1. 机器学习之数学系列(三)逻辑回归反向传播梯度计算公式推导
  2. 【客服准则】浅谈服务差异化对转化的重要性
  3. oppo r15 android 8,质的飞跃?OPPO R15将搭载基于Android 8.0的全新ColorOS 5.0
  4. 八大基本数据类型(详解)
  5. 「文心一言」内测详细使用体验
  6. 记号笔写在白板上引起的尴尬而又无奈的事件
  7. 自己动手实现信息检索系统
  8. 利用搜索量和难度值选择应用关键词
  9. CentOS7搭建LNMP+WordPress一篇搞定
  10. JS如何随机生成一个整数