cocos2d-lua 不渲染纹理,保存当前场景纹理为图片的方法

来源:互联网 发布:js中字符串转json 编辑:程序博客网 时间:2024/05/18 09:17
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)endfunction 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

0 0
原创粉丝点击