《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
今天事情比较少,一不小心多发了几篇。。
浙公网安备 33010602011771号