cocos2d-x lua系统自带截屏功能,使用方便。代码如下:
local fileName = "printScreen.png"
-- 移除纹理缓存
cc.Director:getInstance():getTextureCache():removeTextureForKey(fileName)
self:removeChildByTag(1000)
-- 截屏
cc.utils:captureScreen(function(succeed, outputFile)
if succeed then
local winSize = cc.Director:getInstance():getWinSize()
local sp = cc.Sprite:create(outputFile)
self:addChild(sp, 0, 1000)
sp:setPosition(winSize.width / 2, winSize.height / 2)
sp:setScale(0.5) -- 显示缩放
print(outputFile)
else
cc.showTextTips("截屏失败")
end
end, fileName)
第二种方法,一帧之内进行截图并把纹理保存到本地的方法
关键代码
function WeixinShareTips.createWeixinImageFile(bShareCurrentScene, func_next)
local imgSize = cc.size(640, 960)
local backGround = {
path = "weixin/background_twoDimension.jpg",
pos = cc.p(imgSize.width / 2, imgSize.height / 2),
scale = 1
}
local logo = {
path = cc.logos[cc.getSDKPlat()],
pos = cc.p(503, 848),
scale = 0.51
}
local twoDimension = {
path = nil,
pos = cc.p(532, 106),
scale = 1
}
if bShareCurrentScene then
backGround = nil
logo.pos = cc.p(117, 550)
twoDimension = nil
imgSize = cc.size(960, 640)
logo.scale = 0.3
elseif cc.getSDKPlat() == "ios_yd" then
twoDimension.path = "weixin/twoDimension_bierangwomaoxian.jpg"
elseif cc.getSDKPlat() == "ios_yd2" then
twoDimension.path = "weixin/twoDimension_maoxianqishituan.jpg"
elseif cc.getSDKPlat() == "ios_yd3" then
twoDimension.path = "weixin/twoDimension_menghuanqishituan.jpg"
else
backGround.path = "weixin/background_noDimension.jpg"
twoDimension = nil
end
local bigImagePath = WeixinShareTips.createWeixinImageFileWithLogoAndTwoDimension("bigWeixinShare.jpg", backGround, logo, twoDimension, imgSize)
local saveRet = bigImagePath ~= nil
local function delayDoSomething(call_todo)
cc.Director : getInstance() : getRunningScene() : runAction(cc.Sequence:create(
cc.DelayTime:create(0.1), cc.CallFunc:create(function ()
call_todo()
end)))
end
delayDoSomething(function()
local imgScale = 1/8
imgSize = cc.size(imgSize.width * imgScale, imgSize.height * imgScale)
backGround = {
path = bigImagePath,
pos = cc.p(imgSize.width / 2, imgSize.height / 2),
scale = imgScale
}
local smallImagePath = WeixinShareTips.createWeixinImageFileWithLogoAndTwoDimension("smallWeixinShare.jpg", backGround, nil, nil, imgSize)
delayDoSomething(function()
saveRet = saveRet and (smallImagePath ~= nil)
func_next(saveRet, smallImagePath, bigImagePath)
end)
end)
end
function WeixinShareTips.createWeixinImageFileWithLogoAndTwoDimension(toFileName, backGround, logo, twoDimension, imgSize)
local function createRenderNodeWithPathPos(pathPos)
local sprite = nil
if pathPos then
sprite = cc.Sprite:create(pathPos.path)
sprite : setPosition(pathPos.pos)
sprite : setScale(pathPos.scale)
end
return sprite
end
local function createRenderTextureWithNodes(logoRenderNode, twoDimensionNode, backGroundNode)
-- body
local renderTexture = cc.RenderTexture:create(imgSize.width, imgSize.height)
renderTexture : beginWithClear(0,0,0,0)
if backGroundNode and (cc.Director:getInstance():getRunningScene() ~= backGroundNode) then
backGro