xlua 实现协程替换Unity中的协程
C#中的协程:
IEnumerator ShowSpiritInfo()
{
UIMessageMgr.ShowMsgWait(true); DestroyUIModelInfo(); bool isLoad = false;
AppInterface.GUIModule.CreateUISpirit(currSpiritId, delegate(UISpirit sp)
{
infoTextureCtrl.TargetSpirit = sp;
infoTextureCtrl.ui_Tx.width = ;
infoTextureCtrl.ui_Tx.height = ;
isLoad = true;
});
while (!isLoad)
yield return null;
modelTex.enabled = true;
UIMessageMgr.ShowMsgWait(false);
}
xlua中实现以上协程:
local ShowSpiritInfo = function(previewWnd)
return util.cs_generator(function()
CS.UIMessageMgr.ShowMsgWait(true); previewWnd:DestroyUIModelInfo(); -- 加载精灵
local PlayerManager = CS.Common.AppInterface.GUIModule.PlayerManager;
local root = PlayerManager.m_ModelRoot;
local spirit = CS.UISpirit(PlayerManager.m_ModelRoot, previewWnd.currSpiritId);
PlayerManager.listSpirit:Add(spirit);
PlayerManager.dicSpirit:Add(spirit.number, spirit);
local isLoad = false;
spirit:BeginLoad(function()
isLoad = true;
end);
while false == isLoad do
coroutine.yield(CS.UnityEngine.WaitForSeconds(0.01));
end previewWnd.infoTextureCtrl.TargetSpirit = spirit;
previewWnd.infoTextureCtrl.ui_Tx.width = ;
previewWnd.infoTextureCtrl.ui_Tx.height = ;
previewWnd.modelTex.enabled = true; CS.UIMessageMgr.ShowMsgWait(false);
end)
end;
xlua中主要是 1、2、17、18、19行的写法。
调用(第10行实现):
xlua.hotfix(CS.Modules.UI.UI_SpiritPreviewWnd, "OnChooseHandle", function(self, index)
if index >= and index <= self.currSpiritConfigList.Count then
self.currSpiritConfig = self.currSpiritConfigList[index];
self.currSpiritId = self.currSpiritConfig.f_SpiritID;
self.currSpiritData = CS.ClientData.ClientSpiritData.CreateSpiritData(self.currSpiritId);
self:RefreshSpiritInfo();
if == self.currSpiritConfigList[index].f_NextStarID then
CS.GameDefine.Mono:StartCoroutine(ShowCharacterInfo(self));
else
CS.GameDefine.Mono:StartCoroutine(ShowSpiritInfo(self));
end
end
end)
xlua 实现协程替换Unity中的协程的更多相关文章
- Unity中的协程(一)
这篇文章很不错的问题,推荐阅读英文原版: Introduction to Coroutines Scripting with Coroutines 这篇文章转自:http://blog.csdn. ...
- Unity中的协程是什么?
什么是协程? 1.协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码. 2.Unity在每一帧(Frame)都会去处理对象上的协程.Unit ...
- 协程及Python中的协程
1 协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.(其实并没有说明白~) 我觉得单说协程,比较抽象,如果对线程有一定了解 ...
- Unity中使用协程进行服务端数据验证手段
近期在做项目中的个人中心的一些事情,用户头像上传,下载,本地缓存,二级缓存,压缩,这些都要做,麻雀虽小五脏俱全啊,也是写的浑浑噩噩的, 当我们在上传用户头像的时候,向服务端发送上传头像请求之前,一般都 ...
- unity 中的协程
//The coroutine will continue after all Update functionshave been calledon the next frame. ; //Conti ...
- Unity C#笔记 协程
什么是协程 协同程序,在主程序运行的同时,开启另外一段逻辑处理,来协同当前程序的执行. 可能看了这段文字介绍还是有点模糊,其实可以用多线程来比较. 多线程 多线程,顾名思义,多条同时执行的线程. 最初 ...
- Unity中巧用协程和游戏对象的生命周期处理游戏重启的问题
主要用到协程(Coroutines)和游戏对象的生命周期(GameObject Lifecycle)基础知识,巧妙解决了游戏重启的问题. 关于协程,这里有篇文章我觉得写的非常好,理解起来也很容易.推荐 ...
- 【Unity3D基础教程】给初学者看的Unity教程(五):详解Unity3D中的协程(Coroutine)
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 为什么需要协程 在游戏中有许多过程(Proc ...
- C#中的yield return与Unity中的Coroutine(协程)(下)
Unity中的Coroutine(协程) 估计熟悉Unity的人看过或者用过StartCoroutine() 假设我们在场景中有一个UGUI组件, Image: 将以下代码绑定到Image using ...
随机推荐
- Linux一些基本配置
Linux发行版:centos 6.5 配置yum源 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo -P /etc/yum.repos ...
- MySql数据库概念
一.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行 ...
- 02: flask 使用举例
1.1 项目说明 https://github.com/rickyyangrui/Flask_web_demo1 1.项目文件结构 2.项目主文件 cssmin==0.2.0 Flask==0.1 ...
- Babel总结
什么是babel? babel是一个JavaScript编译器. Babel是一个工具链,主要用于将ECMAScript 2015+代码转换为向后兼容的旧浏览器或环境中JavaScript版本. 注解 ...
- 使用Jenkins构建、部署spring boot项目
一.环境搭建 本次实验的环境为Ubuntu 16.04,Jenkins 2.8.3 1.安装ssh sudo apt-get update # 更新软件源 sudo apt-get install o ...
- 【Python54.1--豆瓣登录】
1.模拟豆瓣登录 ''' |-- 代码解析: |-- 1.登录必须具备的条件:url,cookie,fromData fromData的参数如下: source: index_nav form_ema ...
- Mac10.13 telnet不能用的解决方法
telnet在Mac 10.13上不能用了 Restore的方法 brew install inetutils To be clear, brew install inetutils will ins ...
- topcoder srm 455 div1
problem1 link 令$f[x1][y1][x2][y2]$表示矩形(x1,y1)(x2,y2)中能选出的最大值.dp即可. problem2 link 这个题应该有更好的递推公式. 我的做法 ...
- tomcat部署maven web项目
tomcat上部署maven web项目的三种方法 1.将maven项目打成war包,然后放到tomcat容器中发布: 2.在IDE工具中部署tomcat,然后使用远程部署方式部署本地maven项目: ...
- eMMC ext4综述【转】
本文转载自:https://blog.csdn.net/lieye_leaves/article/details/78214410 eMMC ext4综述一.系统的引导启动1.1系统的引导启动http ...