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)

 

转载于:https://www.cnblogs.com/luguoshuai/p/10332394.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值