目前在用tolua进行项目开发,C#与lua交互的部分消息使用了注册监听处理,监听方法均放到Update方法里面进行处理,问题在于失去焦点后Update方法将不继续执行,这就导致了监听方法未能及时调用。
成都网站设计、做网站介绍好的网站是理念、设计和技术的结合。创新互联拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。
例如:AB玩家进行纸牌游戏,A接到电话并失去焦点,Update不执行导致消息未能及时通知服务器,此时B未能及时收到A的状态误以为A还在打牌状态。
此外Android Plugins中的UnityPlayer.UnitySendMessage,经测试在强制暂停时,OnPause、OnStop周期中UnitySendMessage无效。(个人未测)
故要特殊处理这两个方法,现改成C#直接调用lua方法,去掉监听推送这一步。
C#: ////// 当程序获得或者是去焦点时 /// /// public void OnApplicationFocus(bool focus) { try { LuaManager.CallFunc_Void("MineMessageCenter.OnApplicationFocus", focus); } catch (System.Exception) { throw; } //Debug.logger.Log("焦点:" + focus); //if (focus) //{ // MessageCenter.GetInstance().PostEvent(EventNameDefine.GetFocusEvent); //} //else //{ // MessageCenter.GetInstance().PostEvent(EventNameDefine.LostFocusEvent); //} } ////// 当程序暂停 /// /// public void OnApplicationPause(bool isPause) { try { LuaManager.CallFunc_Void("MineMessageCenter.OnApplicationPause", isPause); } catch (System.Exception) { throw; } //Debug.logger.Log("暂停:" + isPause); //if (isPause) //{ // MessageCenter.GetInstance().PostEvent(EventNameDefine.GetPauseEvent); //} //else //{ // MessageCenter.GetInstance().PostEvent(EventNameDefine.LostPauseEvent); //} }
Lua: --当程序获得或者是去焦点时 function MineMessageCenter.OnApplicationFocus(focus) print("焦点:"..tostring(focus)); end --当程序暂停 function MineMessageCenter.OnApplicationPause(isPause) --print("暂停:"..tostring(isPause)); end