c# - 在循环中使用协程
问题描述
我对循环中的协程有疑问。更具体地说,我如何实现它,我的循环继续检查条件,直到协程中的 waitForSeconds 结束。
我附上了我的代码截图。我的问题是在 myAudio.Play(); 之后显示“现在我被处决”这行。这是有道理的,因为协程只等待 yield return 之后的语句,但我怎样才能让它与 for 循环一起工作?
任何帮助,将不胜感激!太感谢了。
解决方案
StartCoroutine
每个都IEnumerator
作为一个新的协程开始,并立即与其余代码继续。
所以正如所说,没有你的代码的进一步上下文你会做的事情就像
private void playDBStack()
{
fillList();
StartCoroutine(playDBStackRoutine())
}
private IEnumerator playDBStackRoutine()
{
for(var i = 0; i < 2; i++)
{
// executes playAudio and waits for it to finish
yield return playAudio();
}
}
private IEnumerator playAudio()
{
var x = chooseList(score);
// executes PlayAndWait and wait for it to finish
yield return PlayAndWait(x);
}
这样您就可以执行,同时等到IEnumerator
s 完成后再进行下一个。
一些进一步的说明:
线
myAudio.GetComponent<AudioSource>();
绝对什么都不做。
updateScore
当前状态下的整个方法可以简单地通过使用来替换score++;
我会考虑一种可以用简单的运算符“代码气味”代替的方法;)
推荐阅读
- qb64 - 不移动时播放器图像消失/“load_map”加载速度不够快
- javascript - 如何从 iframe 按钮提交填充父页面内的文本输入?
- python - 如果我想将推文流式传输到 BigQuery,最好的方法是什么?
- r - Tidyverse 突然崩溃
- google-cloud-platform - 通过防火墙将 Dialogflow API URL 列入白名单
- html - 可以最后加载背景视频元素吗?
- php - 如何正确使用付款意图,我不断收到错误无效的付款意图状态
- android - 当android用户接受许可时更新谷歌地图上的位置
- javascript - 将 onclick 和 onmouseover 添加到画布元素
- python - 如何定义正则表达式,例如:包含字母和 () 但不包含。和数字使用 Python