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

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

转载请注明:IT_xiao小巫

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

例子代码如下:

--[[
截屏测试
CaptureScreenTest
]]--
-- 获取屏幕大小
local winSize = cc.Director:getInstance():getWinSize()
local kTagSprite = 1
local childTag   = 119

-- 创建层
local function createLayer()
  -- 创建层
  local layer = cc.Layer:create()
  local filename = ""-- 文件名

  -- 标题
  local title = cc.Label:createWithTTF("New Renderer", "fonts/arial.ttf", 36)
  title:setColor(cc.c3b(255,255,0)) -- 设置颜色为黄色
  layer:addChild(title, 1, 10000) -- 第一个参数为node,第二个参数为zorder,第三个参数是tag
  title:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 30))-- 设置位置top,center

  -- 子标题
  local subTitle = cc.Label:createWithTTF("Capture screen test, press the menu items to capture the screen", "fonts/arial.ttf", 12)
  subTitle:setColor(cc.c3b(255,255,0)) -- 设置为黄色
  layer:addChild(subTitle, 1, 10001)  -- 设置tag为10001
  subTitle:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 60) )-- 设置位置

  -- 左边位置
  local left  = cc.p(winSize.width / 4, winSize.height / 2)
  -- 右边位置
  local right = cc.p(winSize.width / 4 * 3, winSize.height / 2)

  -- 精灵1
  local sp1 = cc.Sprite:create("Images/grossini.png")
  sp1:setPosition(left)-- 设置初始位置在左边
  local move1 = cc.MoveBy:create(1, cc.p(winSize.width/2, 0))--移动动作,持续1秒
  -- 动作序列1
  local seq1  = cc.RepeatForever:create(cc.Sequence:create(move1, move1:reverse()))
  layer:addChild(sp1)--添加精灵1
  sp1:runAction(seq1)-- 执行动作序列
  -- 精灵2
  local sp2 = cc.Sprite:create("Images/grossinis_sister1.png")
  sp2:setPosition(right)-- 设置初始位置在右边
  local move2 = cc.MoveBy:create(1, cc.p(-winSize.width/2, 0))-- 移动动作,持续1秒
  -- 动作序列2
  local seq2  = cc.RepeatForever:create(cc.Sequence:create(move2, move2:reverse()))
  layer:addChild(sp2)-- 添加精灵2
  sp2:runAction(seq2) -- 执行动作序列2

  --截屏回调方法
  local function afterCaptured(succeed, outputFile)
    if succeed then
      local sp = cc.Sprite:create(outputFile)
      layer:addChild(sp, 0, childTag)
      sp:setPosition(winSize.width / 2, winSize.height / 2)
      sp:setScale(0.25) -- 显示缩放
      fileName = outputFile
    else
      cclog("Capture screen failed.")
    end
  end

  -- 点击标签回调的方法
  local function onCaptured(tag, sender)
    -- 移除纹理缓存
    cc.Director:getInstance():getTextureCache():removeTextureForKey(fileName)
    layer:removeChildByTag(childTag)
    fileName = "CaptureScreenTest.png"
    -- 截屏
    cc.utils:captureScreen(afterCaptured, fileName)
  end

  local ttfConfig = {} -- 字体配置表
  ttfConfig.fontFilePath = "fonts/arial.ttf" -- 字体路径
  ttfConfig.fontSize     = 24  -- 字体大小
  -- 创建一个标签,名为capture all
  local label1 = cc.Label:createWithTTF(ttfConfig, "capture all", cc.TEXT_ALIGNMENT_CENTER, winSize.width)
  -- 创建菜单项标签
  local mi1 = cc.MenuItemLabel:create(label1)
  -- 注册点击回调方法
  mi1:registerScriptTapHandler(onCaptured)
  -- 创建菜单
  local menu = cc.Menu:create(mi1)
  -- 添加菜单到层中
  layer:addChild(menu)
  -- 设置在宽的一半,高的1/4的位置上
  menu:setPosition(winSize.width / 2, winSize.height / 4)

  return layer
end

--------------------------------
-- CaptureScreen
--------------------------------
function CaptureScreenTestMain()
  -- 创建一个场景
  local scene = cc.Scene:create()
  -- 添加场景到层中
  scene:addChild(createLayer())
  -- 添加Back菜单项
  scene:addChild(CreateBackMenuItem())
  return scene
end

Cocos2d-x 提供以下方法用于截屏:

cc.utils:captureScreen(afterCaptured, fileName)

其中afterCaptured是自定义的回调方法,fileName为截屏文件名

Cocos2d-x 3.2 Lua示例 CaptureScreen(截屏),布布扣,bubuko.com

时间: 2024-10-10 16:31:05

Cocos2d-x 3.2 Lua示例 CaptureScreen(截屏)的相关文章

Cocos2d-x 3.2 Lua示例 AssetsManagerTest(资源管理器)

Cocos2d-x 3.2 Lua示例 AssetsManagerTest(资源管理器) 本篇博客介绍Cocos2d-x 为我们提供的一个类--AssetsManager在Lua中的使用例子,效果如下图: Cocos2d-x 给出的例子是AssetsManagerTest,进入会发现三个菜单项: enter reset update enter是进入场景,reset是删除本地版本,重新设置,update就是更新资源文件. 笔者使用LDT打开lua-tests测试项目: 在src目录下找到Asse

Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试)

Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试) 本篇博客介绍Cocos2d-x 3.2Lua示例中点击移动的例子,在这个例子你可以得到如何创建单点触摸的事件和注册事件监听回调方法. 示例代码: --[[ ClickAndMoveTest.lua 点击与移动 ]]-- -- 获取屏幕尺寸 local size = cc.Director:getInstance():getWinSize() local layer = nil -- 层 local kTag

Cocos2d-x 3.1.1 Lua示例 ActionEaseTest(动作)

Cocos2d-x Lua示例 ActionEaseTest(动作) 本篇博客介绍Cocos2d-x中的动作,Cocos2d-x为我们提供了丰富的动作接口,下面笔者就详细介绍一下: 本系列博客介绍的是lua的实现,想看C++实现请移步到Cocos2d-x为我们提供的例子: Action类继承关系图,各位可以到http://cn.cocos2d-x.org/doc/cocos2d-x-3.0/db/d61/classcocos2d_1_1_action.html进行参考: 本篇博客的例子并没有涉及

lua示例 - 访问数据库

-- 加载动态库 lib = assert(package.loadlib("luasql/mysql.dll","luaopen_luasql_mysql")) lib() -- 创建环境对象 env = assert (luasql.mysql()) -- 连接数据库 con = assert (env:connect ("test", "root", "123456", "localhost

Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试)

Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试) 本篇博客介绍Cocos2d-x 3.2中Lua示例的音频测试,Cocos2d-x使用SimpleAudioEngine这个类来实现音频的控制,比如播放.暂停.停止等操作. Lua代码中,使用的是AudioEngine,具体实现可以参考AudioEngine.lua文件,只是把SimpleAudioEngin进行了封装. 示例代码: --[[ CocosDenshionTest.lua Cocos2d-x 音频支

Cocos2d-x 3.2 Lua示例 XMLHttpRequestTest(Http网络请求)

Cocos2d-x 3.2 Lua示例 XMLHttpRequestTest(Http网络请求) 本篇博客介绍Cocos2d-x 3.2Lua示例中的XMLHttpRequestTest,这里提供GET和POST两种http请求方式,返回数据类型有以下几种: cc.XMLHTTPREQUEST_RESPONSE_STRING = 0  -- 返回字符串类型cc.XMLHTTPREQUEST_RESPONSE_ARRAY_BUFFER = 1 -- 返回字节数组类型cc.XMLHTTPREQUES

cocos2dx 3.2 Touch Listen和menu回调实现截屏

在Cocos2d-X 3.x里面,已经集成了截屏功能,单独放在utils命名空间里,实现在base/ccUtils.h文件里面.看下函数申明 /** Capture the entire screen * To ensure the snapshot is applied after everything is updated and rendered in the current frame, * we need to wrap the operation with a custom comm

iOS开发UI篇—Quartz2D使用(截屏)

iOS开发UI篇—Quartz2D使用(截屏) 一.简单说明 在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏.如图: 完成截屏功能的核心代码:- (void)renderInContext:(CGContextRef)ctx;调用某个view的layer的renderInContext:方法即可 二.代码示例 storyboard界面搭建: 代码: 1 // 2 // YYViewController.m 3 // 01-截屏 4 // 5 // Created by appl

Android Multimedia框架总结(二十五)MediaProjection实现手机截屏(无须root)

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53966818 前言:一年半多以前,我们曾有个项目,要做一个截屏功能,当时负责调研的同事,答应了产品上这个功能,但开发一周后,发现,无法实现截取手机屏幕图像,须要root权限,才能做.因为最近研究MediaProjection,意外的发现,竟然无须root,可以轻松实现次功能.曾经被做不到的,如今做到了,很难相信此时的心情.看下今天