cocoscreator截屏分享
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截屏分享相关推荐
- iOS端如何实现带UI截屏分享
下载资源文件 1.1 需要开发者 点击这里 来下载分享的demo 1.2 需要 点击这里 下载SDK 导入SDK以及相关文件需要导入下载的SDK资源文件以及UI截屏所需要的6个文件,如下图: 注意:在 ...
- Android截屏分享
最近项目需要实现Android截屏分享功能,包括Android截屏获取图片.将图片保存到本地.通知系统相册更新.通过微信.QQ.微博分享截屏图片,本篇博客作为总结回顾. 一.Android截屏获取图片 ...
- iOS截屏分享功能实现
产品经理今天提出一个新的需求,需要实现类似于每日优鲜.淘宝等客户端的截屏分享的功能,即home+power截屏后弹出分享页面,同时将截取到的图片放在当前页面中展示,如下效果: 之前没有做过这样的需求, ...
- ios android 截屏 分享,iOS 系统自带截屏分享
分享一篇iOS系统自带截屏分享 使用方案 UIImage *image = [KJTools kj_shareWithHideBlock:^bool{ /// 隐藏不需要截图的区域 return YE ...
- iOS 系统自带截屏分享
分享一篇iOS系统自带截屏分享 使用方案 UIImage *image = [KJTools kj_shareWithHideBlock:^bool{/// 隐藏不需要截图的区域return YES; ...
- 微信截屏分享、图片压缩处理!
情景 项目当中需要截取当前屏幕图片,然后处理分享到微信朋友或朋友圈.微信分享图片需要设置一张不超过32K大小的缩略图,超过32K将导致分享失败.功能是已经上线,过程中有些细节和注意的地方,在这里分享下 ...
- android 新浪财经截屏分享,QQ浏览器HD 2.2:独创截屏分享至微博
近日,腾讯发布了QQ浏览器HD(aPad)2.2,最大特色是网页拉取速度提升20%,上网更流畅;同时,还推出"截图"插件,是目前首个支持截图的aPad浏览器,用户还可以将截图分享至 ...
- 直接在屏幕上,选取区域进行截屏分享到QQ、微信
在手机屏幕上,选择某个区域进行截屏. 1,借用网络上一张图片,说明每个点的位置,主要是左上角和右下角这两个点.中间那块浅蓝色的就是我们的目标区域了 /*** 将一个view保存成图片* @param ...
- ios android 截屏 分享,iOS微信截屏分享
1.需求:將截屏后的圖片分享至微信好友或朋友圈. 2.問題:1.圖片縮略圖太大無法分享:2.分享的圖片不夠清晰. 3.描述:微信分享是需要設置兩張圖:需分享圖的縮略圖(大小有限制)和需分享的圖(要求高 ...
最新文章
- Let's Encrypt 免费SSL配置
- 5分钟教你写出一份完美的PRD文档(附案例)
- 两台centos之间免密传输 scp
- cf方框透视易语言代码怎么写_易语言真的那么不入流吗?
- python基础入门(3)之字符串
- Agile: 为什么要使用 scrum 而不是瀑布?
- 自定义控件的构建(10)
- 摄像头 保存到外网服务器_直播平台搭建千万不要忽略流媒体服务器的存在
- 字符串内置方法 第二弹
- c语言必背100行代码编程入门教学,(完整版)c语言初学必背代码.docx
- Typora免费版,不是破解版,是没有升级的老版本,用的还是比较舒服的
- 5G移动通信发展历程
- IOS 发展史各个ipone的发布时间(二)
- BPDU网桥协议数据单元和STP生成树协议
- 愚人节巧用CSS开个极客式玩笑以chrome为例
- python 提取pdf格式电子发票并改名
- 微软发布InstaLoad电池技术 不考虑极性
- 递归找到节点后跳出递归循环
- addons软件下载_addons制作器最新版
- 2022年化工自动化控制仪表最新解析及化工自动化控制仪表免费试题