MoneyNumView = {} local PositionType = { Up_Or_Left = 1, Down_Or_Right = 2, } local ImageTypeConfig = { [MoneyNumViewImageType.Small_1] = { [MoneyType.RMB] = {type = PositionType.Down_Or_Right, imgName = "c_czlb_yuan_zh", imgSize = nil}, [MoneyType.USD] = {type = PositionType.Up_Or_Left, imgName = "c_czlb_yuan_vi", imgSize = nil} }, [MoneyNumViewImageType.Big_1] = { [MoneyType.RMB] = {type = PositionType.Down_Or_Right, imgName = "c_czlb_yuan_zh", imgSize = Vector3.New(60, 60)}, [MoneyType.USD] = {type = PositionType.Up_Or_Left, imgName = "c_czlb_yuan_vi", imgSize = Vector3.New(60, 60)} } } function MoneyNumView:New(gameObject) local b = {} b.gameObject = gameObject b.transform = gameObject.transform setmetatable(b, { __index = MoneyNumView }) return b end --初始化组件(用于子类重写) function MoneyNumView:InitComponent() self.Text_Num = Util.GetGameObject(self.gameObject, "Text_Num"):GetComponent("Text") self.Image_Num_Vertical = Util.GetGameObject(self.gameObject, "Image_Num_Vertical"):GetComponent("VerticalLayoutGroup") self.V_NumLayout = Util.GetGameObject(self.Image_Num_Vertical.transform, "nums"):GetComponent("VerticalLayoutGroup") self.V_Image_1 = Util.GetGameObject(self.Image_Num_Vertical.transform, "Image (1)"):GetComponent("Image") self.V_Image_2 = Util.GetGameObject(self.Image_Num_Vertical.transform, "Image (2)"):GetComponent("Image") self.Image_Num_Horizontal = Util.GetGameObject(self.gameObject, "Image_Num_Horizontal"):GetComponent("HorizontalLayoutGroup") self.H_NumLayout = Util.GetGameObject(self.Image_Num_Horizontal.transform, "nums"):GetComponent("HorizontalLayoutGroup") self.H_Image_1 = Util.GetGameObject(self.Image_Num_Horizontal.transform, "Image (1)"):GetComponent("Image") self.H_Image_2 = Util.GetGameObject(self.Image_Num_Horizontal.transform, "Image (2)"):GetComponent("Image") self.V_Num = {} self.H_Num = {} for i = 1, 10 do self.V_Num[i] = Util.GetGameObject(self.V_NumLayout.transform, "num ("..i..")"):GetComponent("Text") self.H_Num[i] = Util.GetGameObject(self.H_NumLayout.transform, "num ("..i..")"):GetComponent("Text") end end --绑定事件(用于子类重写) function MoneyNumView:BindEvent() end --添加事件监听(用于子类重写) function MoneyNumView:AddListener() end --移除事件监听(用于子类重写) function MoneyNumView:RemoveListener() end --- --- --- 参数说明 --- num 要显示的金钱的数量 --- viewType 界面类型 对应 MoneyNumViewType 常量 --- font 字体 --- fontSize 字体大小(只在文本下生效) --- localScale 字体缩放 --- rectSize 文本:文本框的大小 艺术字:单个艺术字的大小,修改会影响排版,但不会影响艺术字的大小 --- space 间距 该组件中有两个Layout嵌套 space为Vector2值 x为外层嵌套的spacing值 y为内层嵌套的值 --- imgType 符号图片的类型, 该类型可根据目前使用的货币类型,定义 元 和 $ 图片文字的大小 --- --界面打开时调用(用于子类重写) function MoneyNumView:OnOpen(num, viewType, font, fontSize, localScale, rectSize, space, imgType) self.num = tostring(num) or "" self.viewType = viewType self.font = font self.fontSize = fontSize self.localScale = localScale self.rectSize = rectSize self.space = space self.imgType = imgType or MoneyNumViewImageType.Small_1 self:RefreshShow() end function MoneyNumView:RefreshShow() -- self.Text_Num.gameObject:SetActive(self.viewType == MoneyNumViewType.Text_Vertical or self.viewType == MoneyNumViewType.Text_Horizontal) self.Image_Num_Vertical.gameObject:SetActive(self.viewType == MoneyNumViewType.Image_Vertical) self.Image_Num_Horizontal.gameObject:SetActive(self.viewType == MoneyNumViewType.Image_Horizontal) -- 竖向文本每个字中间添加一个\n if self.viewType == MoneyNumViewType.Text_Vertical then local moneyStr = MoneyUtil.GetMoneyUnitNameWithMoney(self.num) local strTb = StringConvertToTable(moneyStr) local txt = strTb[1] for i = 2, #strTb do txt = txt .. "\n" .. strTb[2] end self:SetTextShow(txt) -- 横向文本直接显示 elseif self.viewType == MoneyNumViewType.Text_Horizontal then local moneyStr = MoneyUtil.GetMoneyUnitNameWithMoney(self.num) self:SetTextShow(moneyStr) -- 竖向图片显示 elseif self.viewType == MoneyNumViewType.Image_Vertical then -- 处理数字显示 self:SetNumShow(self.V_Num) -- 处理符号显示 self:SetMarkShow(self.V_Image_1, self.V_Image_2) -- self.Image_Num_Vertical.spacing = self.space.x or 0 self.V_NumLayout.spacing = self.space.y or 0 -- ForceRebuildLayout(self.V_NumLayout.transform) ForceRebuildLayout(self.Image_Num_Vertical.transform) -- 横向图片显示 elseif self.viewType == MoneyNumViewType.Image_Horizontal then -- 处理数字显示 self:SetNumShow(self.H_Num) -- 处理符号显示 self:SetMarkShow(self.H_Image_1, self.H_Image_2) -- self.Image_Num_Horizontal.spacing = self.space.x or 0 self.H_NumLayout.spacing = self.space.y or 0 -- ForceRebuildLayout(self.H_NumLayout.transform) ForceRebuildLayout(self.Image_Num_Horizontal.transform) end -- self.isChange = 0 self:RefreshSize() self:RefreshOffsetPosition() end -- 设置图片数字显示 function MoneyNumView:SetTextShow(txt) self.Text_Num.text = txt self.Text_Num.font = resMgr:LoadAsset(self.font) self.Text_Num.fontSize = self.fontSize self.Text_Num.transform.localScale = Vector3.one * self.localScale self.Text_Num.transform.sizeDelta = self.rectSize ForceRebuildLayout(self.Text_Num.transform) end -- 设置图片数字显示 function MoneyNumView:SetNumShow(numList) local numTb = StringConvertToTable(self.num) for i = 1, 10 do if numTb[i] then numList[i].gameObject:SetActive(true) numList[i].text = numTb[i] numList[i].font = resMgr:LoadAsset(self.font) numList[i].fontSize = self.fontSize numList[i].transform.localScale = Vector3.one * self.localScale numList[i].transform.sizeDelta = self.rectSize else numList[i].gameObject:SetActive(false) end end end -- 设置图片数字显示 function MoneyNumView:SetMarkShow(img1, img2) local config = ImageTypeConfig[self.imgType][MoneyUtil.MT] if not config then return end local imgGo if config.type == PositionType.Down_Or_Right then imgGo = img2 elseif config.type == PositionType.Up_Or_Left then imgGo = img1 end img1.gameObject:SetActive(imgGo == img1) img2.gameObject:SetActive(imgGo == img2) -- 设置图片显示 imgGo.sprite = Util.LoadSprite(config.imgName) if config.imgSize then imgGo.transform.sizeDelta = config.imgSize else imgGo:SetNativeSize() end end function MoneyNumView:SetNum(num) if not num then return end self.num = tostring(num) self:RefreshShow() end function MoneyNumView:SetOffsetPosition(position) if not position then return end self.offsetPosition = position self:RefreshOffsetPosition() end function MoneyNumView:SetOffsetRotation(rotation) if not rotation then return end self.offsetRotation = rotation self:RefreshOffsetRotation() end -- -- function MoneyNumView:Update() -- -- 延迟3帧刷新大小 -- if self.isChange <= 3 then -- if self.isChange == 3 then -- self:RefreshSize() -- self:RefreshOffsetPosition() -- end -- self.isChange = self.isChange + 1 -- end -- end -- 刷新组件大小 function MoneyNumView:RefreshSize() if self.viewType == MoneyNumViewType.Text_Vertical or self.viewType == MoneyNumViewType.Text_Horizontal then self.transform.sizeDelta = self.Text_Num.transform.sizeDelta elseif self.viewType == MoneyNumViewType.Image_Vertical then self.transform.sizeDelta = self.Image_Num_Vertical.transform.sizeDelta elseif self.viewType == MoneyNumViewType.Image_Horizontal then self.transform.sizeDelta = self.Image_Num_Horizontal.transform.sizeDelta end end -- 修正组件位置 function MoneyNumView:RefreshOffsetPosition() if not self.offsetPosition then self.offsetPosition = Vector2.New(0, 0) return end if self.viewType == MoneyNumViewType.Text_Vertical or self.viewType == MoneyNumViewType.Text_Horizontal then self.Text_Num.transform.localPosition = self.offsetPosition elseif self.viewType == MoneyNumViewType.Image_Vertical then self.Image_Num_Vertical.transform.localPosition = self.offsetPosition elseif self.viewType == MoneyNumViewType.Image_Horizontal then self.Image_Num_Horizontal.transform.localPosition = self.offsetPosition end end -- 修正组件角度 function MoneyNumView:RefreshOffsetRotation() if not self.offsetRotation then self.offsetRotation = Vector3.New(0, 0, 0) return end if self.viewType == MoneyNumViewType.Text_Vertical or self.viewType == MoneyNumViewType.Text_Horizontal then self.Text_Num.transform.rotation = Quaternion.Euler(self.offsetRotation) elseif self.viewType == MoneyNumViewType.Image_Vertical then self.Image_Num_Vertical.transform.rotation = Quaternion.Euler(self.offsetRotation) elseif self.viewType == MoneyNumViewType.Image_Horizontal then self.Image_Num_Horizontal.transform.rotation = Quaternion.Euler(self.offsetRotation) end end --界面关闭时调用(用于子类重写) function MoneyNumView:OnClose() end return MoneyNumView