local RenderTextureManager = class("RenderTextureManager") local EVENT_AFTER_UPDATE = "director_after_update" local RenderTextureInfo = require("render/RenderTextureInfo") local Queue = requireUtil( "queue" ) function RenderTextureManager:ctor() self._renderInfos = {} self._unUseIDQueue = Queue.new() self._updateHandler = cc.EventListenerCustom:create(EVENT_AFTER_UPDATE, handler(self, self.Tick)) global.Director:getEventDispatcher():addEventListenerWithFixedPriority(self._updateHandler, 1) --------------RenderTexture部分代码 放在定时器之后执行防止 渲染节点被删了 造成崩溃--------------------------------- end function RenderTextureManager:Destory() if RenderTextureManager.instance then RenderTextureManager.instance:Cleanup() RenderTextureManager.instance = nil end end function RenderTextureManager:Inst() if not RenderTextureManager.instance then RenderTextureManager.instance = RenderTextureManager.new() end return RenderTextureManager.instance end function RenderTextureManager:Tick() local dt = global.Director:getDeltaTime() for id, item in ipairs(self._renderInfos) do if not item:IsInvalid() then item:Tick(dt) end end end function RenderTextureManager:AddDrawFuncOnce(data) data.count = 1 data.time = data.time or 0 return self:AddDrawFunc(data) end --{func,time} function RenderTextureManager:AddDrawFunc(data) if not data then return nil end local id data.count = data.count or -1 data.time = data.time or 0 if self._unUseIDQueue:size() > 0 then id = self._unUseIDQueue:pop() data.id = id self._renderInfos[id]:Reset(data) return id end id = #self._renderInfos + 1 data.id = id self._renderInfos[id] = RenderTextureInfo.new(data) return id end function RenderTextureManager:RmvDrawFunc(id) self._unUseIDQueue:push(id) self._renderInfos[id]:SetInvalid(true) end function RenderTextureManager:Cleanup() self._renderInfos = {} self._unUseIDQueue:clear() cc.Director:getInstance():getEventDispatcher():removeEventListener(self._updateHandler) end return RenderTextureManager