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
backGroundNode : getTexture() : setTexParameters(cc.GL_LINEAR, cc.GL_LINEAR, cc.GL_CLAMP_TO_EDGE, cc.GL_CLAMP_TO_EDGE)
end
if backGroundNode then
backGroundNode : visit()
end
if logoRenderNode then
logoRenderNode : visit()
end
if twoDimensionNode then
twoDimensionNode : visit()
end
renderTexture : endToLua()
return renderTexture
end
local function createImageFileWithRenderTexture(renderTexture)
local saveRet = renderTexture : saveToFile(toFileName, cc.IMAGE_FORMAT_JPEG, false)
cc.Director : getInstance() : getTextureCache() : removeTextureForKey(
cc.FileUtils:getInstance():getWritablePath() .. toFileName)
if saveRet then
return cc.FileUtils:getInstance():getWritablePath() .. toFileName
else
cc.showTextTips("保存图片失败")
return nil
end
end
local logoNode = createRenderNodeWithPathPos(logo)
local twoDimensionNode = createRenderNodeWithPathPos(twoDimension)
local backGroundNode = createRenderNodeWithPathPos(backGround)
if not backGroundNode then
backGroundNode = cc.Director:getInstance():getRunningScene()
end
local renderTexture = createRenderTextureWithNodes(logoNode, twoDimensionNode, backGroundNode)
return createImageFileWithRenderTexture(renderTexture)
end
cocos2d-lua 不渲染纹理,保存当前场景纹理为图片的方法
最新推荐文章于 2021-04-25 16:21:07 发布