BarrageItem = BarrageItem or BaseClass() function BarrageItem:__init(parent,prefab,recycle_callback) local go = newObject(prefab) local label = go:GetComponent("Text") local transform = go.transform transform:SetParent(parent) transform.localScale = Vector3.one self.gameObject = go self.transform = transform self.label = label self.width = 0 self.end_call_back = recycle_callback end function BarrageItem:SetData(data) self.label.text = data.str self.width = self.label.preferredWidth self.duration = data.duration or 5 end function BarrageItem:Fire() local posY = BarrageManager:getInstance():GetRandomFirePosY() local half_screen_width = BarrageManager:getInstance().width/2 self.transform.localPosition = Vector3(half_screen_width, posY, 0) self.tween_play = TweenLite.to(self, self.transform, TweenLite.UiAnimationType.POSX, -half_screen_width-self.width, self.duration, function() if self.end_call_back then self.end_call_back(self) end end, TweenFunc.LINEAR) end function BarrageItem:StopRunning() if self.tween_play then TweenLite.Stop(self.tween_play) self.tween_play = nil end end function BarrageItem:__delete() self:StopRunning() end