前言

Creator2.0之后的版本,弃用了RenderTexture渲染树,导致很多功能不能用。别担心,去除一个东西,总会有另外一个东西来替代,所以重心就转移到了Camera身上。

提示:亲测实用有效,成败主要在于参数和语句的使用

该文章详细讲述了截图、交互、分享的流程,代码可以按需参考使用。第一部分是 js客户端 的截图交互代码,第二部分是 SDKInterfaces接口 的代码。

一、js截图、交互代码

1、我们把该方法封装到 share_image 函数中。

share_image:function()
{// 新建一个 RenderTexture,如果截图内容中不包含 Mask 组件,可以不用传递第三个参数var texture = new cc.RenderTexture();texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height);// 创建一个camera, 并且设置 camera 的 targetTexture 为新建的 RenderTexture// 这样 camera 的内容将会渲染到新建的 RenderTexture 中。var node = new cc.Node();node.parent = cc.director.getScene();node.x = cc.visibleRect.width*0.5node.y = cc.visibleRect.height*0.5var camera = node.addComponent(cc.Camera);camera.targetTexture = texture;camera.enabled = true// 渲染一次摄像机,即更新一次内容到 RenderTexture 中camera.render();// 这样我们就能从 RenderTexture 中获取到数据了var data = texture.readPixels();// 获取到的截图数据是颠倒的,我们要处理data// 用 filpYImage 函数把图捋顺喽(该函数在第一部分第2条)var width = texture.widthvar height = texture.heightvar picData = filpYImage(data, width, height)camera.enabled = falsenode.removeFromParent()// 1、如果你想本地测试一下截图是否成功,可以打开下面这段注释// var spriteFrame = new cc.SpriteFrame()// spriteFrame.setTexture(texture)// var sprite_node = new cc.Node()// var sprite = sprite_node.addComponent(cc.Sprite)// sprite.spriteFrame = spriteFrame  // cc.director.getScene().addChild(sprite_node)// 2、将截图传递给Native设备,设置一下可读写路径,并返回该路径var filePath = jsb.fileUtils.getWritablePath() + 'render_to_image.png';var succeed = jsb.saveImageData(picData, width, height, filePath)if(succeed){// 路径设置成功之后,我们开始分享                // 调用java交互访问第二大部分的函数share_imgjsb.reflection.callStaticMethod(packageName.replace(/\./g, '/') + "/SDKInterfaces",   //包名 + SDK文件"share_img",    //调用SDK中的share_img函数(在第二部分)"(Ljava/lang/String;II)V",  //函数的参数类型filePath, width,height)}
}

2、filpYImage 函数:一开始的截图是颠倒的,把截图捋顺喽

filpYImage:function(data, width, height)
{var picData = new Uint8Array(width * height * 4)var rowBytes = width * 4for (var row = 0; row < height; row++) {var srow = height - 1 - rowvar start = srow * width * 4var reStart = row * width * 4for (var i = 0; i < rowBytes; i++) {picData[reStart + i] = data[start + i]}}return picData
}

至此,js截图、交互完成,接下来我们看SDK端的接口。

二、SDKInterfaces接口

注意: 记得导入所需类名

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXImageObject;
import org.cocos2dx.lib.Cocos2dxActivity;
import java.io.File;public static IWXAPI mIWXAPI;
public static void share_img(String path, int width, int height)
{try{File file = new File(path);if (!file.exists()) {return;}输出一下路径System.out.println(path);System.out.println(width);System.out.println(height);Bitmap bmp = BitmapFactory.decodeFile(path);WXImageObject imgObj = new WXImageObject(bmp);WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = imgObj;Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);bmp.recycle();msg.thumbData = Util.bmpToByteArray(thumbBmp, true);SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("img");req.message = msg;req.scene = SendMessageToWX.Req.WXSceneSession;mIWXAPI.sendReq(req);   }catch(Exception e){e.printStackTrace();}
}

以上两部分完成之后,我们构建、打包,就可以顺利实现分享功能。

后语:

我刚好是要写这个分享战绩的功能,也在网上搜了很多例子,发现网上多是星星草草的几句话,没有一点实用性。索性自己摸索出这种方法,把它分享给广大学者,希望可以对学者们有所帮助。

CocosCreator 硬核 APP分享战绩、截图到微信相关推荐

  1. CocosCreator 硬核 微信小游戏分享战绩、截图到微信

    前言 上一篇提到了APP如何分享战绩到微信,但每个引擎都有自己独有的一套渲染方式,所以这套方案不适用于微信小游戏的截图分享.本文就简单讲述一下微信小游戏如何分享战绩.截图给微信好友. 提示: 第一部分 ...

  2. 硬核 App,这项新功能一定要打开,关键时刻能救命!!

    2019年6月17日,四川宜宾市长宁县6级的地震.在本次地震中,因为提前了几十秒精确预警,相关视频刷屏网络,阅读量达到了惊人的25亿人次. 有当地网友表示:"接近23点的时候,小区广播突然出 ...

  3. 智能仓储硬核资料分享

    导语 大家好,我是智能仓储物流技术研习社的社长,你的老朋友,老K. 知识星球 * 原创电子书 * 深海社区 * 微信群 上周知识星球分享的学习参考资料主要包括: 未来智慧化企业-智慧供应链 第2章智慧 ...

  4. 八款实用硬核APP推荐!满满干货!

    ?幕布 懒人神器,清单式笔记,输入文字即可自动生成思维导向图,帮助整理思维 ?达目标 金钱设立目标,完不成会被瓜分目标金,还可去围观别人,可以见识到优秀的人如何努力成功的 ?超级计算机 可以计算各种数 ...

  5. Android微信App 分享功能调整,Android 微信SDK分享功能(1)

    转于:http://blog.csdn.net/freesonhp/article/details/10296141 ----------------------------------------- ...

  6. 太硬核了!十天十场技术干货分享,其中有一个大佬还是我的死党!

    引言 14 世纪的欧洲,佛罗伦萨瘟疫盛行,10名男女在乡村一所别墅里避难.他们终日游玩欢宴,每人每天讲一个故事,共住了10天讲了百个故事.这就是文艺复兴时期的第一部现实主义巨著--<十日谈> ...

  7. 【NAS备份】摆脱丢数据的噩梦,群晖备份硬核实战教程分享

    前言 大家好,我是村雨Mura,本期来聊一聊我是如何用 NAS 轻松.完整地备份自己数据的. 首先,硬件再好不如备份 即便从小的线材到硬盘的质量都用最好的,也很难保证不丢数据,宇宙射线.硬盘不可逆衰减 ...

  8. 两核云服务器python,硬核分享:一套云操作,让Dynamo成为变形金刚

    原标题:硬核分享:一套云操作,让Dynamo成为变形金刚 你好,这里是BIMBOX. 我们的老朋友,建筑学和计算机双修的小神仙@VCTCN93又来BOX分享了. 当我问到他这次打算聊点啥,VCTCN9 ...

  9. ♥看二本学渣如何进腾讯 分享面试经验、职场感悟、硬核知识、大厂内推♥

    ☆☆☆牛牛´s简介☆☆☆ 牛牛,普通二本学渣,实习进完美,毕业进腾讯,去过外企,肝过头条. 目前又继续回腾讯窝着.       ☆☆☆牛牛´s公众号☆☆☆ 日常硬核输出数据库.数据结构.操作系统.分布 ...

最新文章

  1. 360脱口秀:‘未来属于虚拟’开播啦!
  2. SQL Server 2016新特性:Live Query Statistics
  3. SQL Server 2014内存优化表的使用场景
  4. 微信中的这个功能尽早设置,即使转错账也能及时收回!
  5. 鲲鹏云实验-Python+Jupyter机器学习基础环境
  6. 计算机自动控制论文,电气自动化控制人工智能技术研究-人工智能论文-计算机论文.docx...
  7. 偏微分方程数值解法python_微分方程数值方法和偏微分方程有什么区别吗?
  8. 一个专注PR剪辑视频的PR模板网站PRmuban.com
  9. 商业化产品经理与用户产品经理区别
  10. Ubuntu离线网卡驱动安装
  11. i12蓝牙耳机怎么设置成中文_耳朵里的小精灵——乐迈车载智能蓝牙耳机
  12. Java算法:LeetCode算法Java版合集1111-1588题
  13. Java 是否应该使用通配符导入( wildcard imports)
  14. android binder - 客户端(c++层) 调用 服务端(java层),服务端回调客户端 例子
  15. zookeeper之Curator
  16. Bullet 物理引擎 简析[1]
  17. 使用BBED恢复DELETE的数据
  18. Linux发行版新秀:基于Ubuntu、系统核心 “不可变”
  19. 决策树实现(CART生成及剪枝)
  20. VLN阅读报告5:CVDN:Vision-and-Dialog Navigation

热门文章

  1. 产品经理--如何设计一款老年人O2O产品
  2. HTML5 Canvas 绘制星条旗
  3. java中打印靠左三角形,java控制台打印三角形区域
  4. 【请收下这份汇总全网的Java视频资料】
  5. 线框图:启动开发项目的绝佳方式
  6. QT学习四之界面布局
  7. WP Rocket激活版 WordPress优化插件 v3.7.3
  8. 计算机上怎么改时间格式,Numbers日期格式怎么设置 Numbers日期格式自定教程
  9. 2007年春节联欢晚会经典台词
  10. 开机自启动程序(登陆后)