• CocosCreator 截屏(全屏,指定node区域)


    cocos版本:2.4.4

    参考:

    cocos官方文档-摄像机截图

    游戏中可能会用到截图功能,利用摄像机组件camera进行截图。

    一  截图指定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;
        }
    

    截图了全屏  

     

  • 相关阅读:
    UITabBarController生命周期(使用storyoard搭建)
    ios应用数据存储方式(归档)
    ios应用数据存储方式(偏好设置)
    使用picker View控件完成一个简单的选餐应用
    ios应用数据存储方式(XML属性列表-plist)
    控制器的View的创建
    控制器的创建
    权限管理具体代码实现
    gitHub相关
    初始Ajax
  • 原文地址:https://www.cnblogs.com/gamedaybyday/p/15836011.html
Copyright © 2020-2023  润新知