在循环中使用协程
Using a Coroutine in a loop
我对循环中的协程有疑问。更具体地说明我如何实现它,即我的循环继续检查条件,直到协程中的 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
完成后再进行下一个。
一些进一步的说明:
行
myAudio.GetComponent<AudioSource>();
什么都不做。
当前状态下的整个方法 updateScore
可以简单地用
替换
score++;
我会考虑一种可以用简单的运算符“code smell”代替的方法;)
我对循环中的协程有疑问。更具体地说明我如何实现它,即我的循环继续检查条件,直到协程中的 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
完成后再进行下一个。
一些进一步的说明:
行
myAudio.GetComponent<AudioSource>();
什么都不做。
当前状态下的整个方法
替换updateScore
可以简单地用score++;
我会考虑一种可以用简单的运算符“code smell”代替的方法;)