相信很多人都被回调地狱折磨过 ,
比如我们想写一段逻辑,播放A动画 A动画完毕之后 进行B动画 B动画完毕之后进行C动画
这时候 一般我们的逻辑是这样的
function Play()
playA()
end
function PlayA()
--do 动画结束之后播放B
end
function PlayB()
--do 动画结束之后播放C
end
function PlayC()
--end
end
当代码流程比较短的时候 感觉还可以 但是 比较长的时候
- 读起来很困难 需要一步跳 才知道 他接下来想干什么
- 当要改顺序的时候 就很麻烦 需要将衔接的回调修改
–那么 以一种正常的思维应该是什么样的
我们其实是想这样的书写
这样写的好处就是 我们可以随意调换它们的顺序
阅读起来比较容易 看一个函数 就可以知道它最 终要做哪些事情
function Play()
playA()
PlayB() --等待A播放完播放B
PlayC() --等待B播放完播放C
end
function PlayA()
--do 动画结束 已结束 可以进行下一步
end
function PlayB()
--do 动画结束 已结束 可以进行下一步
end
function PlayC()
--end
end
可是lua中都是同步的 ,怎么实现可以等待一个函数结束之后 在进行下一个函数呢
lua中的协同函数 完美的解决了这个问题
我们可以这样
-- 将 Play 当成一些lua协同启动函数
function Play()
playA()
PlayB() --等待A播放完播放B
PlayC() --等待B播放完播放C
end
function PlayA()
--do 在动画结束事件中唤醒携程
--do 挂起携程
end
function PlayB()
--do 在动画结束事件中唤醒携程
--do 挂起携程
end
function PlayC()
--end
end
最后 lua异步详细的代码程序 可以看看这篇文章