CocosCreator 截屏(全屏,指定node区域)
2022/1/23 12:35:23
本文主要是介绍CocosCreator 截屏(全屏,指定node区域),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考:
cocos官方文档-摄像机截图
cocos版本:2.4.4
使用camera.targetTexture进行截图。
一 截图指定node
如下图,对heroNode进行截图。
MainScene.ts代码如下:
const { ccclass, property } = cc._decorator; @ccclass export default class MainScene extends cc.Component { @property(cc.Node) //截图目标节点 heroNode: cc.Node = null; start() { let node = this.screenShot(this.heroNode); node.x = 0; node.y = 0; node.parent = this.node; } /** * 截图 * @param targetNode 截图目标节点,如果为null则表示截全屏 * @returns 返回截屏图片的node */ screenShot(targetNode: cc.Node = null) { //获取当前场景Camera let camera = cc.director.getScene().getComponentInChildren(cc.Camera); //创建新的texture let texture = new cc.RenderTexture(); texture.initWithSize(cc.winSize.width, cc.winSize.height, (cc.game as any)._renderContext.STENCIL_INDEX8); //创建新的spriteFrame let spriteFrame = new cc.SpriteFrame(); if (targetNode == null) { spriteFrame.setTexture(texture); } else { let nodeX = cc.winSize.width / 2 + targetNode.x - targetNode.width / 2; let nodeY = cc.winSize.height / 2 + targetNode.y - targetNode.height / 2; let nodeWidth = targetNode.width; let nodeHeight = targetNode.height; //只显示node部分的图片 spriteFrame.setTexture(texture, new cc.Rect(nodeX, nodeY, nodeWidth, nodeHeight)); } //创建新的node let node = new cc.Node(); let sprite = node.addComponent(cc.Sprite); sprite.spriteFrame = spriteFrame; //截图是反的,这里将截图scaleY取反,这样就是正的了 sprite.node.scaleY = - Math.abs(sprite.node.scaleY); //手动渲染camera camera.cullingMask = 0xffffffff; camera.targetTexture = texture; camera.render(); camera.targetTexture = null; return node; } }
截图效果,可见人物只截取了node范围内的部分。
二 截图全屏
直接调用上面代码的screenShot(),不传入参数,就是截图全屏。
start() { let node = this.screenShot(); node.x = 0; node.y = 0; node.parent = this.node; }
截图了全屏
这篇关于CocosCreator 截屏(全屏,指定node区域)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享