加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 16:54:27 所属栏目:百科 来源:网络整理
导读: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 } loc
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,scale = imgScale
        }

        local smallImagePath = WeixinShareTips.createWeixinImageFileWithLogoAndTwoDimension("smallWeixinShare.jpg",nil,imgSize)
        delayDoSomething(function()
            saveRet = saveRet and (smallImagePath ~= nil)
            func_next(saveRet,smallImagePath,bigImagePath)
        end)
    end)
end

function WeixinShareTips.createWeixinImageFileWithLogoAndTwoDimension(toFileName,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)

        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,backGroundNode)
    return createImageFileWithRenderTexture(renderTexture)
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读