游戏中的装备分解

装备分解

简单理解:将待分解的装备放入右侧分解的卡槽中 然后待分解装备变灰

同时保证卡槽区域满了之后点击再无效(右侧卡槽区域的装备也可点击返回到左侧将待分解的装备变亮)

Mvc中的v层

--[[
-- added by author @ 2023/11/21 16:18:00
-- UIDeCompose视图层
-- 注意:
-- 1、成员变量最好预先在__init函数声明,提高代码可读性
-- 2、OnEnable函数每次在窗口打开时调用,直接刷新
-- 3、组件命名参考代码规范
--]]
local UIDeComposeView = BaseClass("UIDeComposeView", UIBaseView)
local base = UIBaseView

local ComItem=require"UI.UIDeCompose.Component.ComItem"

local function RefreshItem(self)
		--设置刷新函数
		self.scrollView:SetOnRefresh(function (item,index)
			local data=self.model.equipList[index+1]
			item:Refresh(data)	
		end)	
		--设置数据长度
		self.scrollView:SetLength(self.model.bagCount)

		--设置滑动列表置顶
		self.scrollView:ResetToBeginning()
end

local function OnCreate(self)
	base.OnCreate(self)
	-- 窗口生命周期内保持的成员变量放这
	self.scrollView=self:AddComponent(UIWrapGroup,"Scroll View/Viewport/Content",ComItem)

	self.holdUI={}
	for i = 1, 4, 1 do
		self.holdUI[i]=self:AddComponent(UIImage,"Decompose/DecomCell/"..i,AtlasConfig.Goods)
		self.holdUI[i]:SetSpriteName("empty.png")

		local btn=self:AddComponent(UIPointerClick,"Decompose/DecomCell/"..i)
		btn:SetOnClick(function ()
			self.ctrl:CancleDeComposeData(i)
		end)
	end

	self.decomposeClick=self:AddComponent(UIButton,"Decompose/DecomBtn")
	self.decomposeClick:SetOnClick(function ()
		self.ctrl:Decompose()
	end)

	self.toggles={}
	for i = 1, 2, 1 do
		self.toggles[i]=self:AddComponent(UIToggle,"Decompose/Toggle"..i)	
	end
	--一键分解
	self.oneKeyDecomposeClick=self:AddComponent(UIButton,"Decompose/AutoDecomBtn")
	self.oneKeyDecomposeClick:SetOnClick(function ()
		local tb={}
		for i = 1, 2, 1 do
			if self.toggles[i]:IsOn() then
				table.insert(tb,i)
			end
		end
		self.ctrl:OneKeyDecompose(tb)
	end)

	--关闭
	self.closeBtn=self:AddComponent(UIButton,"CloseBtn")
	self.closeBtn:SetOnClick(function ()
		UIManager:GetInstance():CloseWindow(UIWindowNames.UIDeCompose)
	end)
end
-- 打开
local function OnEnable(self)
	base.OnEnable(self)
	-- 窗口关闭时可以清理的成员变量放这
	RefreshItem(self)
end
-- 关闭
local function OnDestroy(self)
	base.OnDestroy(self)
	-- 清理成员变量
end

--刷新数据
local function OnRefreshHold(self)
	for k, v in ipairs(self.model.isHold) do
		if v then
			local data=self.model.holds[k]
			local equipData=LangUtil.GetEquipById(data[1].equipmentId)
			self.holdUI[k]:SetSpriteName(equipData.icon..".png")
		else
			self.holdUI[k]:SetSpriteName("empty.png")
		end
	end
	RefreshItem(self)
end

local function OnAddListener(self)
	base.OnAddListener(self)
	-- UI消息注册
	self:AddUIListener("RefreshHold", OnRefreshHold)
end

local function OnRemoveListener(self)
	base.OnRemoveListener(self)
	-- UI消息注销
	self:RemoveUIListener("RefreshHold", OnRefreshHold)
end


UIDeComposeView.OnCreate = OnCreate
UIDeComposeView.OnEnable = OnEnable
UIDeComposeView.OnDestroy = OnDestroy
UIDeComposeView.OnAddListener = OnAddListener
UIDeComposeView.OnRemoveListener = OnRemoveListener

return UIDeComposeView


Mvc中的M层  有卡槽区域的表 卡槽是否有装备的表

--[[
-- added by author @ 2023/11/21 16:18:00
-- UIDeComposeUIMain模型层
-- 注意:
-- 1、成员变量预先在OnCreate、OnEnable函数声明,提高代码可读性
-- 2、OnCreate内放窗口生命周期内保持的成员变量,窗口销毁时才会清理
-- 3、OnEnable内放窗口打开时才需要的成员变量,窗口关闭后及时清理
-- 4、OnEnable函数每次在窗口打开时调用,可传递参数用来初始化Model
--]]
local UIDeComposeModel = BaseClass("UIDeComposeModel", UIBaseModel)


local base = UIBaseModel-- 创建

local curNum=0
local function OnCreate(self)
	base.OnCreate(self)
	-- 窗口生命周期内保持的成员变量放这
end

local function InitEquipData(self,bagData)
	curNum=0
	self.equipList={}
	self.holds={{},{},{},{}}
    self.isHold={false,false,false,false}

	self.bagCount=UserData:GetInstance():GetBagCount()
	for k, v in ipairs(bagData) do
		if v.goodsType==1 and v.equipmentId~=-1 then
			table.insert(self.equipList,{v,false})
		end
	end
end

-- 打开
local function OnEnable(self)
	base.OnEnable(self)
	-- 窗口关闭时可以清理的成员变量放这
	InitEquipData(self,UserData:GetInstance():GetBagDate())
end
-- 关闭
local function OnDestroy(self)
	base.OnDestroy(self)
	-- 清理成员变量
end

local function OnAddDeComPoseData(self,data)
	
	if curNum>=4 then
		return
	end
	curNum=curNum+1
	local index=0
	for k, v in ipairs(self.isHold) do
		if v==false then
			index=k
			break
		end
	end

	self.isHold[index]=true
	data[2]=true
	self.holds[index]=data

	self:UIBroadcast("RefreshHold")
end

local function OnCancleDeCompose(self,index)
	
	local state=self.isHold[index]
	if state then
		curNum=curNum-1
		self.isHold[index]=false
		self.holds[index][2]=false
		self.holds[index]={}

		self:UIBroadcast("RefreshHold")
	end
end

local function OnSynBagData(self,param1)
	
	print(#param1)
	InitEquipData(self,param1)
	self:UIBroadcast("RefreshHold")
end

-- 监听选服变动
local function OnAddListener(self)
	base.OnAddListener(self)
	self:AddDataListener("AddDeComPoseData", OnAddDeComPoseData)
	self:AddDataListener("CancleDeCompose", OnCancleDeCompose)

	--同步背包数据消息
	self:AddDataListener("SynBagData", OnSynBagData)
end

local function OnRemoveListener(self)
	base.OnRemoveListener(self)
	self:RemoveDataListener("AddDeComPoseData", OnAddDeComPoseData)
	self:RemoveDataListener("CancleDeCompose", OnCancleDeCompose)

	--同步背包数据消息
	self:RemoveDataListener("SynBagData", OnSynBagData)
end


UIDeComposeModel.OnCreate = OnCreate
UIDeComposeModel.OnEnable = OnEnable
UIDeComposeModel.OnDestroy = OnDestroy
UIDeComposeModel.OnAddListener = OnAddListener
UIDeComposeModel.OnRemoveListener = OnRemoveListener

return UIDeComposeModel

无线滑动列表中的item项 并给你刷新数据

local ComItem=BaseClass("ComItem",UIWrapComponent)

local base=UIWrapComponent


local function OnCreate(self)
    base.OnCreate(self)
   
    self.icon=self:AddComponent(UIImage,"icon",AtlasConfig.Goods)

    self.itemClick=self:AddComponent(UIPointerClick,"icon")
    self.itemClick:SetOnClick(function ()
        DataManager:GetInstance():Broadcast("AddDeComPoseData",self.data)
    end)
end

local function Refresh(self,data)
    self.data=data
    if data==nil then
        self.icon:SetSpriteName("装备格子.png")
        self.icon:SetColor(Color.white)
        self.icon:SetRayCastTarget(true)
    else       
        local tbData=LangUtil.GetEquipById(self.data[1].equipmentId)
        self.icon:SetSpriteName(tbData.icon..".png")

        if self.data[2] then
            self.icon:SetColor(Color.gray)
            self.icon:SetRayCastTarget(false)
        else
            self.icon:SetColor(Color.white)
            self.icon:SetRayCastTarget(true)
        end
    end
   
end


ComItem.OnCreate=OnCreate
ComItem.Refresh=Refresh

return ComItem

简单漂字和飞图片(从一个位置飞到另外一个位置)

local n=0
function FlyText(content)
	GameObjectPool:GetInstance():GetGameObjectAsync("UI/Prefabs/View/Fly.prefab",function (fly)
        	local topLayer=UIManager:GetInstance().layers["TopLayer"]
			fly.transform:SetParent(topLayer.transform)
			fly.transform.localPosition=Vector3.zero
			fly.transform.localEulerAngles=Vector3.zero
			fly.transform.localScale=Vector3.one
  
			n=n+1
			fly.name="fly"..n
			local baseContainer=UIBaseContainer.New(topLayer,fly.name)
			baseContainer:OnCreate()
			baseContainer.rectTransform.offsetMax = Vector2.zero
			baseContainer.rectTransform.offsetMin = Vector2.zero
			baseContainer.rectTransform.localScale = Vector3.one
			baseContainer.rectTransform.localPosition = Vector3.zero
			local flyText=baseContainer:AddComponent(UIText,"Text")
			flyText:SetText(content)
			flyText:SetColor(Color.red)
			flyText.transform.localPosition=Vector3.zero
			flyText.transform:DOLocalMove(Vector3(0,200,0),2):OnComplete(function ()
				flyText.unity_uitext:DOFade(0,1):OnComplete(function ()
					GameObjectPool:GetInstance():RecycleGameObject("UI/Prefabs/View/Fly.prefab",fly)
					print("11111")
				end)
			end)

	end)
end

function FlyPropImage(content)
	GameObjectPool:GetInstance():GetGameObjectAsync("UI/Prefabs/View/Item.prefab",function (go)
		local layer=UIManager:GetInstance().layers["TopLayer"]
		go.transform:SetParent(layer.transform)
		go.transform.localPosition=Vector3.zero
		go.transform.localEulerAngles=Vector3.zero
		go.transform.localScale=Vector3.one
		go.name="img"..n


		local baseContainer=UIBaseContainer.New(layer,go.name)
		baseContainer:OnCreate()
		baseContainer.rectTransform.offsetMax = Vector2.zero
		baseContainer.rectTransform.offsetMin = Vector2.zero
		baseContainer.rectTransform.localScale = Vector3.one
		baseContainer.rectTransform.localPosition = Vector3.zero
		local flyImg=baseContainer:AddComponent(UIImage,"Item",AtlasConfig.Goods)
		flyImg:SetSpriteName(content)
		flyImg.transform.localPosition=Vector3.zero
		flyImg.transform:DOLocalMove(Vector3(147,-243,10),3):OnComplete(function ()
			GameObjectPool:GetInstance():RecycleGameObject("UI/Prefabs/View/Item.prefab",go)
		end)

	end)
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值