BarrageView = BarrageView or BaseClass(BaseView) function BarrageView:__init() self.base_file = "common" self.layout_file = "BarrageView" self.layer_name = "Main" self.destroy_imm = false self.change_scene_close = true self.playing_list = {} self.item_pool = Array.New() self.data_list = Array.New() self.open_callback = function() self:ResetView() end self.load_callback = function() self:LoadSuccess() end self.destroy_callback = function () self:Remove() end end function BarrageView:Remove() self.item_pool = {} end function BarrageView:ResetView() self.data_list = Array.New() for k,v in ipairs(self.playing_list) do self:RecycleItem(k) end self.playing_list = {} end function BarrageView:LoadSuccess() self.transform:SetAsFirstSibling() -- self.transform.sizeDelta = Vector2(ScreenWidth,ScreenHeight) self.origin_label = self:GetChild("BarrageItem").gameObject local fire_num = 0 for i=1,self.data_list:GetSize() do self:AppendNewItem() end end function BarrageView:AppendNewItem(data) data = data or self.data_list:PopFront() if not data then self:Close() return end if not self.is_loaded or TableSize(self.playing_list) >= BarrageManager:getInstance().max_count_limit then self.data_list:PushBack(data) else local item if #self.item_pool == 0 then local function callback(item) self:RecycleItem(item) end item = BarrageItem.New(self.transform, self.origin_label, callback) else item = self.item_pool:PopFront() end item.gameObject:SetActive(true) item:SetData(data) item:Fire() self.playing_list[item] = true end end function BarrageView:RecycleItem(item) item:StopRunning() item.gameObject:SetActive(false) self.item_pool:PushBack(item) self.playing_list[item] = nil end