刚刚做Unity大项目的菜鸟一枚,带来一项目中遇到的问题。这个问题集呢,就作为我成长的写照吧
废话不多说了,上问题吧。最近做项目的过程中,遇到了一个问题。做的功能呢很简单,就是一个小的预览tip,要求点击tip时,不能关闭,点击tip之外,关闭tip,很平常的功能。项目是纯lua开发的,使用的是EasyTouch和Ngui。EasyTouh的一些点击事件都封装起来了,包括点击,长按,单指,双指的一些事件等等。ngui的按钮事件也封装起来了。我是接手的别人的工作,他对于这功能的做法如下:
function UI_SmallCommonTipPanel:AddListener( ... )
-- 点击tip本身,tip不会消失
EventManager.SetButtonEventHandler(BG_Sprite.gameObject, EnumButtonEvent.OnClick, DelegateFactory.DelegateDefines_OnTouchButtonHandler(UI_SmallCommonTipPanel.DontCloseUI), 100, 0);
EasyTouchUP = DelegateFactory.EasyTouch_TouchUpHandler(UI_SmallCommonTipPanel.CloseUI);
EasyTouch.AddTouchUpHandler(EasyTouchUP);
end
-- 不关闭UI的方法
function UI_SmallCommonTipPanel.DontCloseUI()
IsOpen = 0;
end
-- 关闭UI的方法
function UI_SmallCommonTipPanel.CloseUI()
if IsOpen == 0 then
IsOpen = IsOpen +1;
else
-- 封装的关闭ui的方法
UIManager.Instance:CloseUI(UITypeEnum.UI_SmallCommonTipPanel);
IsOpen = IsOpen -1;
end
end
注册了两个监听事件,一个NGUI中的OnClick事件,一个EasyTouch中的鼠标抬起事件,出现的问题是正常点击是能够满足需求的,但是鼠标按下,拖拽,再抬起时,就算是在tip范围内部也会关闭tip。
出现这种问题的原因在于,按下——拖拽——抬起已经不属于NGUI中封装的按钮事件了,这个应该是封装缘故导致的。解决的办法就是将OnPress事件来做为按钮事件就可以了。OnPress事件分为两种状态——按下和抬起两种状态。在按下的的时候,将标志位IsOpen设置为0即可。
网友评论