您好,登錄后才能下訂單哦!
目前在用tolua進行項目開發,C#與lua交互的部分消息使用了注冊監聽處理,監聽方法均放到Update方法里面進行處理,問題在于失去焦點后Update方法將不繼續執行,這就導致了監聽方法未能及時調用。
例如:AB玩家進行紙牌游戲,A接到電話并失去焦點,Update不執行導致消息未能及時通知服務器,此時B未能及時收到A的狀態誤以為A還在打牌狀態。
此外Android Plugins中的UnityPlayer.UnitySendMessage,經測試在強制暫停時,OnPause、OnStop周期中UnitySendMessage無效。(個人未測)
故要特殊處理這兩個方法,現改成C#直接調用lua方法,去掉監聽推送這一步。
C#: /// <summary> /// 當程序獲得或者是去焦點時 /// </summary> /// <param name="focus"></param> 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); //} } /// <summary> /// 當程序暫停 /// </summary> /// <param name="focus"></param> 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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。