繁体   English   中英

在循环中使用协程

[英]Using a Coroutine in a loop

我有一个关于循环中的协程的问题。 更具体地说,我如何实现我的循环继续检查条件,直到协程中的 waitForSeconds 结束。

我附上了我的代码的屏幕截图。 我的问题是在 myAudio.Play(); 之后立即显示了“现在我被执行了”这一行。 这是有道理的,因为协程只在 yield 返回之后等待语句,但我怎样才能让它与 for 循环一起工作?

任何帮助,将不胜感激! 非常感谢。

在此处输入图片说明

StartCoroutine每个IEnumerator作为一个新的 Coroutine 启动,并立即与其余代码连续。

因此,如果没有进一步的代码上下文,您会做的事情就像

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++;

    我会考虑一种可以用简单的运算符“代码气味”代替的方法;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM