zoukankan      html  css  js  c++  java
  • xlua 实现协程替换Unity中的协程

    C#中的协程:

     1      IEnumerator ShowSpiritInfo()
     2         {
     3             UIMessageMgr.ShowMsgWait(true);
     4 
     5             DestroyUIModelInfo();
     6 
     7             bool isLoad = false;
     8             AppInterface.GUIModule.CreateUISpirit(currSpiritId, delegate(UISpirit sp)
     9             {
    10                 infoTextureCtrl.TargetSpirit = sp;
    11                 infoTextureCtrl.ui_Tx.width = 720;
    12                 infoTextureCtrl.ui_Tx.height = 720;
    13                 isLoad = true;
    14             });
    15             while (!isLoad)
    16                 yield return null;
    17             modelTex.enabled = true;
    18             UIMessageMgr.ShowMsgWait(false);
    19         }

    xlua中实现以上协程:

     1 local ShowSpiritInfo = function(previewWnd)    
     2     return util.cs_generator(function()
     3         CS.UIMessageMgr.ShowMsgWait(true);
     4 
     5         previewWnd:DestroyUIModelInfo();
     6 
     7         -- 加载精灵
     8         local PlayerManager = CS.Common.AppInterface.GUIModule.PlayerManager;
     9         local root = PlayerManager.m_ModelRoot;
    10         local spirit = CS.UISpirit(PlayerManager.m_ModelRoot, previewWnd.currSpiritId);
    11         PlayerManager.listSpirit:Add(spirit);
    12         PlayerManager.dicSpirit:Add(spirit.number, spirit);
    13         local isLoad = false;
    14         spirit:BeginLoad(function() 
    15             isLoad = true;
    16         end);
    17         while false == isLoad do 
    18             coroutine.yield(CS.UnityEngine.WaitForSeconds(0.01));
    19         end
    20 
    21         previewWnd.infoTextureCtrl.TargetSpirit = spirit;
    22         previewWnd.infoTextureCtrl.ui_Tx.width = 720;
    23         previewWnd.infoTextureCtrl.ui_Tx.height = 720;
    24         previewWnd.modelTex.enabled = true;
    25 
    26         CS.UIMessageMgr.ShowMsgWait(false);
    27     end)
    28 end;

    xlua中主要是 1、2、17、18、19行的写法。

    调用(第10行实现):

     1 xlua.hotfix(CS.Modules.UI.UI_SpiritPreviewWnd, "OnChooseHandle", function(self, index)
     2     if index >= 0 and index <= self.currSpiritConfigList.Count then
     3         self.currSpiritConfig = self.currSpiritConfigList[index];
     4         self.currSpiritId = self.currSpiritConfig.f_SpiritID;
     5         self.currSpiritData = CS.ClientData.ClientSpiritData.CreateSpiritData(self.currSpiritId);
     6         self:RefreshSpiritInfo();
     7         if 0 == self.currSpiritConfigList[index].f_NextStarID then
     8             CS.GameDefine.Mono:StartCoroutine(ShowCharacterInfo(self));
     9         else
    10             CS.GameDefine.Mono:StartCoroutine(ShowSpiritInfo(self));
    11         end
    12     end
    13 end)
  • 相关阅读:
    javascript入门篇(五)
    javascript入门篇(四)
    javascript入门篇(三)
    原生js查询、添加、删除类
    关于禁止复制网页内容应该做的兼容
    json快速入门
    jquery快速入门(五)
    jquery快速入门(四)
    jquery快速入门(三)
    Triangle 1.6 (A Two-Dimensional Quality Mesh Generator and Delaunay Triangulator)
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/10332394.html
Copyright © 2011-2022 走看看