多条件控制同一个参数的处理

多条件控制同一个参数的处理

问题

举个栗子,游戏里面右上角经常有小地图,在一些场景里面需要隐藏,在其他一些场景需要显示出来。如果简单的在各个需要的地方直接设置小地图的显示隐藏,那么就会出现控制混乱的情况,如果全部控制使用条件语句之类的话又必定十分臃肿。

思路

那么我们需要做的是在小地图那边自己做好显隐接口,其它需要用到的地方就直接调用接口事件控制,为了防止混乱,事件调用时必定需要附带额外参数,这个参数(举例:1.在战斗场景中,2.在副本中,3.在剧情中,4.在隐藏主界面设置中 …)不应该是对应某某场景这么具体的,而是对应某某类型的,这样才不会太繁琐。显隐的控制值如果单独成为一个类,那么就不需要每个相同逻辑的小部件都需要复制一波代码。那么我们可以先把这个类弄出来

多状态标记类代码

--[[
多状态标记类
使用例子:
MainRightTop界面在几种情况下需要隐藏:1.在战斗场景中,2.在副本中,3.在剧情中,4.在隐藏主界面设置中 ...
那么可以在对应的类定于一个变量 self.visibleState = StateFlag.New()

进入战斗场景self.visibleState:addState(StateFlag.H1)--添加1隐藏状态
离开战斗场景self.visibleState:delState(StateFlag.H1)--移除1隐藏状态
判断界面是否显示self.isInstate()==false--显示界面(false表示没添加有任何隐藏状态)
]]
StateFlag=StateFlag or BaseClass()

-- StateFlag状态常量,当然实际使用中会使用更加易懂的变量名重新定全局变量
StateFlag.H0=0x0
StateFlag.H1=0x1
StateFlag.H2=0x2
StateFlag.H3=0x4
StateFlag.H4=0x8
StateFlag.H5=0x10
StateFlag.H6=0x20
StateFlag.H7=0x40
StateFlag.H8=0x80
StateFlag.H9=0x100
StateFlag.H10=0x200
StateFlag.H11=0x400
StateFlag.H12=0x800
StateFlag.H13=0x1000
StateFlag.H14=0x2000
StateFlag.H15=0x4000
StateFlag.H16=0x8000

--[[@
功能:	多状态标记变量
]]
function StateFlag:__init()
	-- 状态值
	self.value=StateFlag.H0
end

-- 设置初始值
function StateFlag:initValue(val)
	self.value = val or StateFlag.H0
end

-- 添加状态量
-- 参数state:StateFlag状态常量
function StateFlag:addState(state)
	self.value = bit.bor(self.value, state)
end

-- 删除状态量
-- 参数state:StateFlag状态常量
function StateFlag:delState(state)
	self.value = bit.band(self.value,bit.bnot(state))
end

-- 是否有状态值
function StateFlag:isInstate()
	return self.value>0
end

使用举例

local function onHideMapView(hide,mode)
	if self.model.visibleState == nil then
		--如果还没有就新建一个
		self.model.visibleState = StateFlag.New()
	end

	mode = mode or StateFlag.H1
	if hide then 	--隐藏
		self.model.visibleState:addState(mode)
	else			--显示
		self.model.visibleState:delState(mode)
	end
	if self.mapView then
		if self.model.visibleState:isInstate() == true then
			self.mapView:Hide()
		else
			self.mapView:CancelHide()
		end
	end
end
self:Bind(EventName.HIDE_Map_VIEW, onHideMapView)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值