Cocos Creator 實(shí)現(xiàn)截圖

前言

Cocos Creator 現(xiàn)在還不是很完善,假如截圖截得是部分節(jié)點(diǎn),所截圖對(duì)象會(huì)跑到左下角,官方提出的將 renderTexture 添加到場(chǎng)景中去,防止截屏?xí)r元素移動(dòng)旧蛾,親測(cè)這樣雖然截圖時(shí)對(duì)象不會(huì)移動(dòng)但是截得圖有問題。

一岁经、具體步驟

1、更改被截圖對(duì)象的錨點(diǎn)

經(jīng)過測(cè)試蛇券,RenderTexture 截圖的時(shí)候會(huì)將被截圖的對(duì)象移到整個(gè)場(chǎng)景的左下角缀壤,然后根絕設(shè)置的 size 朽们,以左下角為坐標(biāo)原點(diǎn)截取,坐標(biāo)系的錨點(diǎn)是(0诉位,0)骑脱。

所以,假如被截圖對(duì)象的錨點(diǎn)為(0.5苍糠,0.5)叁丧,則只能截取右上角的1/4。遂將被截圖對(duì)象的錨點(diǎn)設(shè)置為(0岳瞭,0)拥娄。

2、添加一個(gè)虛假被截圖對(duì)象

經(jīng)過測(cè)試瞳筏,我發(fā)現(xiàn)被截圖對(duì)象被隱藏后稚瘾,只要不在本次刷新界面的時(shí)機(jī)被激活,比如在下次刷新界面的時(shí)候激活姚炕,則會(huì)恢復(fù)到原位(這個(gè)激活操作是必須做的摊欠,否則被移動(dòng)的被截圖對(duì)象也不會(huì)恢復(fù)到原位!)柱宦。

基于這個(gè)測(cè)試結(jié)果些椒,我的思路是:代替原被截圖對(duì)象,放置一個(gè)虛假精靈掸刊,在截圖的時(shí)候?qū)⒔厝〉膱D顯示在這個(gè)虛假精靈中免糕,替換原被截圖對(duì)象,同時(shí)隱藏被截圖對(duì)象忧侧。這樣就看不到被移動(dòng)的被截圖對(duì)象了石窑。然后在一個(gè)合適的時(shí)機(jī),再激活真實(shí)被截圖對(duì)象蚓炬,隱藏虛假被截圖對(duì)象松逊。

3、正式截圖

① 設(shè)置三個(gè)對(duì)象如下代碼:

    properties: {

        // 被截圖對(duì)象 
        cocos: cc.Sprite,
        // 顯示截圖的精靈
        show: cc.Sprite,
        // 被截圖對(duì)象的虛假替身
        cocosImage: cc.Sprite,
    },
    

需要的注意的是:本例中虛假替身本身是在被截圖的對(duì)象的位置的试吁,所以后續(xù)不需要設(shè)置位置棺棵。

② 截圖核心代碼:

shot: function () {

        // 注意,EditBox熄捍,VideoPlayer,Webview 等控件無法被包含在截圖里面
        // 因?yàn)檫@是 OpenGL 的渲染到紋理的功能母怜,上面提到的控件不是由引擎繪制的
        
        if (CC_JSB) {

            // 創(chuàng)建 renderTexture
            var renderTexture = cc.RenderTexture.create(195, 270);
            
            //實(shí)際截屏的代碼
            renderTexture.begin();
            this.cocos._sgNode.visit();
            renderTexture.end();

            // 獲取SpriteFrame
            var nowFrame = renderTexture.getSprite().getSpriteFrame();

            // 賦值給需要截圖的精靈
            this.show.spriteFrame = nowFrame;

            // 顯示虛假的代替精靈
            this.cocosImage.node.active = true;
            this.cocosImage.spriteFrame = nowFrame;

            // 翻轉(zhuǎn)得到的紋理
            var action = cc.flipY(true);
            this.show.node.runAction(action);
            
            var action1 = cc.flipY(true);
            this.cocosImage.node.runAction(action1);

            // 隱藏被截圖的對(duì)象
            this.cocos.node.active = false;
        }
    },

需要注意的:

i RenderTexture 得到的紋理是上下翻轉(zhuǎn)的余耽,所以需要相應(yīng)翻轉(zhuǎn)回來!假如不坐旋轉(zhuǎn)就會(huì)如下圖:

ii 想要截全屏苹熏,只要使用 Canvas 的節(jié)點(diǎn)即可碟贾,全屏的情況下不需要考慮虛假節(jié)點(diǎn)直接截取即可币喧,記得將初始化 RenderTexture 時(shí),傳入的 size 為全屏的大小袱耽。

正常截圖完后的圖如下:

4杀餐、顯示原圖

之前也說了,需要在合適時(shí)機(jī)朱巨,激活被截圖對(duì)象史翘,并隱藏虛假被截圖對(duì)象,代碼如下:

this.cocos.node.active = true;
this.cocosImage.node.active = false

二冀续、其他事項(xiàng)

1琼讽、如果待截圖的場(chǎng)景中含有 mask,請(qǐng)使用下面注釋的語句來創(chuàng)建 renderTexture洪唐。

var renderTexture = cc.RenderTexture.create(640,960, cc.Texture2D.PIXEL_FORMAT_RGBA8888, gl.DEPTH24_STENCIL8_OES);

2钻蹬、把 renderTexture 添加到場(chǎng)景中去,否則截屏的時(shí)候凭需,場(chǎng)景中的元素會(huì)移動(dòng)问欠。(確實(shí)不移動(dòng)了,但是截部分節(jié)點(diǎn)得圖時(shí)有問題粒蜈,假如哪位童鞋測(cè)試沒問題溅潜,希望能聯(lián)系我...)

this.node.parent._sgNode.addChild(renderTexture);

3、把 renderTexture 設(shè)置為不可見薪伏,可以避免截圖成功后滚澜,移除 renderTexture 造成的閃爍

renderTexture.setVisible(false);

4、保存所截的圖嫁怀,并且打印其地址

// 保存截圖到本地
renderTexture.saveToFile("demo.png", cc.IMAGE_FORMAT_PNG, true, function () {
               
            });

// 打印本地的地址   
cc.log(jsb.fileUtils.getWritablePath());

三设捐、Demo

點(diǎn)擊進(jìn)入Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塘淑,隨后出現(xiàn)的幾起案子萝招,更是在濱河造成了極大的恐慌,老刑警劉巖存捺,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件槐沼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捌治,警方通過查閱死者的電腦和手機(jī)岗钩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肖油,“玉大人兼吓,你說我怎么就攤上這事∩梗” “怎么了视搏?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵审孽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我浑娜,道長(zhǎng)佑力,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任筋遭,我火速辦了婚禮打颤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宛畦。我一直安慰自己瘸洛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布次和。 她就那樣靜靜地躺著反肋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪踏施。 梳的紋絲不亂的頭發(fā)上石蔗,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音畅形,去河邊找鬼养距。 笑死,一個(gè)胖子當(dāng)著我的面吹牛日熬,可吹牛的內(nèi)容都是我干的棍厌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼竖席,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼耘纱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起毕荐,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤束析,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后憎亚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體员寇,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年第美,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝶锋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斋日,死狀恐怖牲览,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恶守,我是刑警寧澤第献,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站兔港,受9級(jí)特大地震影響庸毫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衫樊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一飒赃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧科侈,春花似錦载佳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至权薯,卻和暖如春姑躲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盟蚣。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工黍析, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屎开。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓阐枣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親奄抽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔼两,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,070評(píng)論 25 707
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,952評(píng)論 6 13
  • 17款豐田霸道3000后掛備胎比16款霸道3000配置有所增加,外觀沒有太大的改動(dòng)如孝,只是輪胎由245變成265的輪...
    高遠(yuǎn)說車閱讀 291評(píng)論 0 4
  • 路上的紅葉落下很好看 車經(jīng)過帶著風(fēng) 葉子會(huì)起舞 還會(huì)發(fā)出莎莎的聲響 一排六七個(gè)穿著黃色衣服的美團(tuán)外賣小哥騎著小電驢...
    07267ecb7d33閱讀 335評(píng)論 0 0
  • 看看你宪哩,看看我〉谖看看昨天锁孟,看看今天。想想當(dāng)初茁瘦,想想未來品抽。不過是每個(gè)人都有各自的生活方式,不同的選擇甜熔,不同的興趣圆恤。從...
    Miss_舒閱讀 1,007評(píng)論 0 0