工作时发现使用的cocos是3.1的,不能调用cc.utils:captureScreen方法进行截图,这里分享一下使用CCRenderTexture进行截图的方法,本期为截取全屏方法。
-- 返回已渲染的本ccb 渲染纹理示例
local function getRenderTexture()
-- 创建纹理 传入 截取屏幕的宽度和高度
local render = CCRenderTexture:create(Device.screenWidth, Device.screenHeight)
-- 获取当前ccb上的所有节点
local nodes = self.rootNode:getChildren()
local len = #nodes
local rootPos = self.rootNode:getPosition()
-- 启动OpenGL 开启渲染到render的通道
render:beginWithClear(0,0,0,0)
-- 遍历对象并绘制
for i = 1, len do
local child = tolua.cast(nodes[i], "cc.Node")
if child then
child:visit()
end
end
-- 关闭渲染到render的通道
render:endToLua()
return render
end
-- 简化版
function getScreenShootTexture()
local size = cc.Director:getInstance():getWinSize()
local render = cc.RenderTexture:create(size.width, size.height)
local curScene = cc.Director:getInstance():getRunningScene()
render:beginWithClear(0, 0, 0, 0)
curScene:visit()
render:endToLua()
-- local texture = render:getSprite():getTexture()
return render
end
-- 截图保存 参数:文件名
local function ScreenCaptureAndSave(fileName)
local render = getRenderTexture()
local writablePath = cc.FileUtils:getInstance():getWritablePath()
cclog("SavePath is %s", writablePath .. fileName)
render:saveToFile(fileName, cc.IMAGE_FORMAT_PNG)
end
-- 小地图 minimap
local function minimapOnDraw(scale)
-- 清空
if self.render then
self.render:removeFromParent()
self.render = nil
end
local posParam = 1 - scale/2
self.render = getRenderTexture()
self.render:setScale(scale)
self.render:setPosition(Device.screenWidth * posParam, Device.screenHeight * posParam)
self.rootNode:addChild(self.render, 999)
end
-- 每帧调用
local function update(args)
minimapOnDraw(0.2)
end
-- 执行测试
local fileName = "test.png"
ScreenCaptureAndSave(fileName)
self:SetTimmer(update)
指定区域截图待更新。。。