多个对象同时使用一个对象的同步问题

发表于2017-12-01
评论0 2.7k浏览

写了段代码,主要部分如下:

public void OnMouseOver()  
   {  
       hovering = true;  
       //使用  
   }  
   public void OnMouseExit()  
   {  
       hovering = false;  
   } <pre name="code" class="csharp">   
oid 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();  
        }  
    } 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引