写了段代码,主要部分如下:
public void OnMouseOver()
{
hovering = true;
//使用
}
public void OnMouseExit()
{
hovering = false;
} <pre name="code" class="csharp">
void Update()
{
if (hovering)
{
CreatureManager.Instance.ShowCreatureDes(thisGrid.itemId);
DetectUse();
}
else if (!hovering)
{
CreatureManager.Instance.HideCreatureDes();
}
}
主要功能是如果鼠标移到物品格子上面就显示一个介绍的NGUI文本。
文本是作为单例模式的对象的一个方法,当鼠标移动到上面的时候就显示,
否则不显示。这个时候问题来了,当你一个格子发出通知需要显示的时候,
另外的格子都没有检测到鼠标,于是发出通知将NGUI文本屏蔽,显示与屏蔽的需求共存,
于是NGUI文本显示就不正常了。想到了以前JAVA的线程同步处理方法,
这应该是一个解决方案,但是过去太久要复习,还要重看C#的线程处理。
于是又想起另外一个解决方法:加了一个变量everHovered,表示这个物品格子
鼠标曾经滑过上去,然后只有曾经划过的格子才有资格将NGUI文本屏蔽,
主要代码如下:
public void OnMouseOver()
{
hovering = true;
//使用
everHovered = true;
}
public void OnMouseExit()
{
hovering = false;
StartCoroutine(ResetEverHovered());
}
IEnumerator ResetEverHovered()
{
yield return new WaitForSeconds(0.1f);
everHovered = false;
}
<pre name="code" class="csharp"> void Update()
{
if (hovering)
{
CreatureManager.Instance.ShowCreatureDes(thisGrid.itemId);
DetectUse();
}
else if (!hovering&&everHovered)
{
CreatureManager.Instance.HideCreatureDes();
}
}