Lua示例 CaptureScreen(截屏)牛

Cocos2d-x 3.2 Lua示例 CaptureScreen(截屏)

 Cocos2d-x截屏功能是从3.2开始提供的,本篇博客就是介绍Cocos2d-x 3.2中Lua示例中的截屏功能。效果如下所示:




例子代码如下:
[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. --[[  
  2. 截屏测试  
  3. CaptureScreenTest  
  4. ]]--  
  5. -- 获取屏幕大小  
  6. local winSize = cc.Director:getInstance():getWinSize()  
  7. local kTagSprite = 1  
  8. local childTag   = 119  
  9.   
  10.   
  11. -- 创建层  
  12. local function createLayer()  
  13.   -- 创建层  
  14.   local layer = cc.Layer:create()  
  15.   local filename = ""-- 文件名  
  16.   
  17.   -- 标题  
  18.   local title = cc.Label:createWithTTF("New Renderer""fonts/arial.ttf", 36)  
  19.   title:setColor(cc.c3b(255,255,0)) -- 设置颜色为黄色  
  20.   layer:addChild(title, 1, 10000) -- 第一个参数为node,第二个参数为zorder,第三个参数是tag  
  21.   title:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 30))-- 设置位置top,center  
  22.   
  23.   -- 子标题  
  24.   local subTitle = cc.Label:createWithTTF("Capture screen test, press the menu items to capture the screen""fonts/arial.ttf", 12)  
  25.   subTitle:setColor(cc.c3b(255,255,0)) -- 设置为黄色  
  26.   layer:addChild(subTitle, 1, 10001)  -- 设置tag为10001  
  27.   subTitle:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 60) )-- 设置位置  
  28.   
  29.   -- 左边位置  
  30.   local left  = cc.p(winSize.width / 4, winSize.height / 2)  
  31.   -- 右边位置  
  32.   local right = cc.p(winSize.width / 4 * 3, winSize.height / 2)  
  33.   
  34.   -- 精灵1  
  35.   local sp1 = cc.Sprite:create("Images/grossini.png")  
  36.   sp1:setPosition(left)-- 设置初始位置在左边  
  37.   local move1 = cc.MoveBy:create(1, cc.p(winSize.width/2, 0))--移动动作,持续1秒  
  38.   -- 动作序列1  
  39.   local seq1  = cc.RepeatForever:create(cc.Sequence:create(move1, move1:reverse()))  
  40.   layer:addChild(sp1)--添加精灵1  
  41.   sp1:runAction(seq1)-- 执行动作序列  
  42.   -- 精灵2  
  43.   local sp2 = cc.Sprite:create("Images/grossinis_sister1.png")  
  44.   sp2:setPosition(right)-- 设置初始位置在右边  
  45.   local move2 = cc.MoveBy:create(1, cc.p(-winSize.width/2, 0))-- 移动动作,持续1秒  
  46.   -- 动作序列2  
  47.   local seq2  = cc.RepeatForever:create(cc.Sequence:create(move2, move2:reverse()))  
  48.   layer:addChild(sp2)-- 添加精灵2  
  49.   sp2:runAction(seq2) -- 执行动作序列2  
  50.   
  51.   --截屏回调方法  
  52.   local function afterCaptured(succeed, outputFile)  
  53.     if succeed then  
  54.       local sp = cc.Sprite:create(outputFile)  
  55.       layer:addChild(sp, 0, childTag)  
  56.       sp:setPosition(winSize.width / 2, winSize.height / 2)  
  57.       sp:setScale(0.25) -- 显示缩放  
  58.       fileName = outputFile  
  59.     else  
  60.       cclog("Capture screen failed.")  
  61.     end  
  62.   end  
  63.   
  64.   -- 点击标签回调的方法  
  65.   local function onCaptured(tag, sender)  
  66.     -- 移除纹理缓存  
  67.     cc.Director:getInstance():getTextureCache():removeTextureForKey(fileName)  
  68.     layer:removeChildByTag(childTag)  
  69.     fileName = "CaptureScreenTest.png"  
  70.     -- 截屏  
  71.     cc.utils:captureScreen(afterCaptured, fileName)  
  72.   end  
  73.   
  74.   
  75.   local ttfConfig = {} -- 字体配置表  
  76.   ttfConfig.fontFilePath = "fonts/arial.ttf" -- 字体路径  
  77.   ttfConfig.fontSize     = 24  -- 字体大小  
  78.   -- 创建一个标签,名为capture all   
  79.   local label1 = cc.Label:createWithTTF(ttfConfig, "capture all", cc.TEXT_ALIGNMENT_CENTER, winSize.width)  
  80.   -- 创建菜单项标签  
  81.   local mi1 = cc.MenuItemLabel:create(label1)  
  82.   -- 注册点击回调方法  
  83.   mi1:registerScriptTapHandler(onCaptured)  
  84.   -- 创建菜单  
  85.   local menu = cc.Menu:create(mi1)  
  86.   -- 添加菜单到层中  
  87.   layer:addChild(menu)  
  88.   -- 设置在宽的一半,高的1/4的位置上  
  89.   menu:setPosition(winSize.width / 2, winSize.height / 4)  
  90.   
  91.   return layer  
  92. end  
  93.   
  94. --------------------------------  
  95. -- CaptureScreen  
  96. --------------------------------  
  97. function CaptureScreenTestMain()  
  98.   -- 创建一个场景  
  99.   local scene = cc.Scene:create()  
  100.   -- 添加场景到层中  
  101.   scene:addChild(createLayer())  
  102.   -- 添加Back菜单项  
  103.   scene:addChild(CreateBackMenuItem())  
  104.   return scene  
  105. end  

Cocos2d-x 提供以下方法用于截屏:
 cc.utils:captureScreen(afterCaptured, fileName)
其中afterCaptured是自定义的回调方法,fileName为截屏文件名


如果觉得博文对您有用处,请到下面链接为小巫投上神圣的一票。

Cocos2d-x 3.2Lua示例UserDefaultTest(用户默认配置

Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试)-具体实现可以参考AudioEngine.lua文件,只是把SimpleAudioEngin进行了封装



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值