《Cocos2d-x-3.2 Lua-tests》文件详解 之 截屏CaptreScreen

截屏是3.2版新加进来的功能。

核心就一句话:cc.utils:captureScreen(CallBack,FileName),接收两个参数,CallBack,用来部署接下来要做的事情,FileName用来命名图片。

  1 local winSize = cc.Director:getInstance():getWinSize()
  2 local kTagSprite = 1
  3 local childTag   = 119
  4 
  5 local function createLayer()
  6     local layer = cc.Layer:create()
  7     local filename = ""
  8     --title界面标题
  9     local title = cc.Label:createWithTTF("New Renderer", "fonts/arial.ttf", 36)
 10     title:setColor(cc.c3b(255,255,0))
 11     layer:addChild(title, 1, 10000)
 12     title:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 30))
 13     
 14     --subTitle副标题
 15     local subTitle = cc.Label:createWithTTF("Capture screen test, press the menu items to capture the screen", "fonts/arial.ttf", 12)
 16     subTitle:setColor(cc.c3b(255,255,0))
 17     layer:addChild(subTitle, 1, 10001)
 18     subTitle:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 60) )
 19 
 20     local left  = cc.p(winSize.width / 4, winSize.height / 2)
 21     local right = cc.p(winSize.width / 4 * 3, winSize.height / 2)
 22 
 23     --Sprite1
 24     local sp1 = cc.Sprite:create("Images/grossini.png")
 25     sp1:setPosition(left)
 26     local move1 = cc.MoveBy:create(1, cc.p(winSize.width/2, 0))
 27     local seq1  = cc.RepeatForever:create(cc.Sequence:create(move1, move1:reverse()))
 28     layer:addChild(sp1)
 29     sp1:runAction(seq1)
 30     
 31     --Sprite2
 32     local sp2 = cc.Sprite:create("Images/grossinis_sister1.png")
 33     sp2:setPosition(right)
 34     local move2 = cc.MoveBy:create(1, cc.p(-winSize.width/2, 0))
 35     local seq2  = cc.RepeatForever:create(cc.Sequence:create(move2, move2:reverse()))
 36     layer:addChild(sp2)
 37     sp2:runAction(seq2)
 38     
 39     --截屏回调方法
 40     --截图成功后,用截到的图创建一个Sprite,添加到Layer上显示出来
 41     local function afterCaptured(succeed, outputFile)
 42         --captureScreen()会传出两个参数跟回调方法,succeed:表示截屏是否成功,outputFile传出文件名 —— 在onCapture中,已经定义了文件名
 43         if succeed then
 44             --成功,则用截图创建Sprite,显示出来
 45             local sp = cc.Sprite:create(outputFile)
 46             layer:addChild(sp, 0, childTag)
 47             sp:setPosition(winSize.width / 2, winSize.height / 2)
 48             --当然不显示原图了,免得遮住了屏幕上的其他内容,所有缩放一下。
 49             sp:setScale(0.45)
 50             --将文件名传给fileName,在下次截图的onCapture方法中,你需要删除它
 51             fileName = outputFile
 52         else
 53             --截屏失败,给外界提示
 54             cclog("Capture screen failed.")
 55         end
 56     end
 57 
 58     --本例核心,截图
 59     local function onCaptured(tag, sender)
 60         --首先将之前截图显示的图片remove掉
 61         cc.Director:getInstance():getTextureCache():removeTextureForKey(fileName)
 62         layer:removeChildByTag(childTag)
 63         
 64         --给截到的图一个文件名
 65         fileName = "CaptureScreenTest.png"
 66         
 67         --[[
 68               调用utls中的captreScreen()方法,该方法需要一个回调方法,一个文件名
 69               回调用于截图之后的才做,如保存、分享等等 ,文件名用于给截到的图命名
 70         --]]
 71         cc.utils:captureScreen(afterCaptured, fileName)
 72     end
 73 
 74     local ttfConfig = {}
 75     ttfConfig.fontFilePath = "fonts/arial.ttf"
 76     ttfConfig.fontSize     = 24
 77     --用ttf文件,创建一个label
 78     local label1 = cc.Label:createWithTTF(ttfConfig, "capture all", cc.TEXT_ALIGNMENT_CENTER, winSize.width)
 79     
 80     --创建菜单项,需要用到label,并注册Tap事件侦听器
 81     local mi1 = cc.MenuItemLabel:create(label1)
 82     mi1:registerScriptTapHandler(onCaptured)
 83     
 84     --创建菜单,将菜单项放进去
 85     local menu = cc.Menu:create(mi1)
 86     layer:addChild(menu)
 87     menu:setPosition(winSize.width / 2, winSize.height / 4)
 88 
 89     return layer
 90 end
 91 
 92 --------------------------------
 93 -- CaptureScreen
 94 --------------------------------
 95 function CaptureScreenTestMain()
 96     local scene = cc.Scene:create()
 97     scene:addChild(createLayer())
 98     scene:addChild(CreateBackMenuItem())
 99     return scene
100 end

今天事情比较少,一不小心多发了几篇。。

posted on 2014-08-13 13:03  _Ernest  阅读(1047)  评论(0)    收藏  举报

导航