首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能阻止联合中的协同线

不能阻止联合中的协同线
EN

Stack Overflow用户
提问于 2019-03-31 15:04:16
回答 3查看 2.6K关注 0票数 1

我试图阻止在玩家死亡时产生的波浪,但我似乎无法阻止这种协同作用。我真的不知道如何攻击这一点了,因为添加if语句和中断不起作用。我如何打电话给StopCoroutine,让例行停车?我需要介绍新的方法吗?

代码语言:javascript
复制
void Start () {
    gameOver = false;
    StartCoroutine (SpawnWaves());
}

void Update()
{
    if (gameOver)
    {
        StopCoroutine(SpawnWaves());
    }
  }

IEnumerator SpawnWaves()
{
    yield return new WaitForSeconds(startWait);
    while (true)
    {
        for (int i = 0; i < hazardCount; i++)
        {
            GameObject enemy = enemies[Random.Range(0, enemies.Length)];
            Instantiate(enemy, spawnPosition1, spawnRotation1);
            Instantiate(enemy, spawnPosition2, spawnRotation2);
            Instantiate(enemy, spawnPosition3, spawnRotation3);
            Instantiate(enemy, spawnPosition4, spawnRotation4);
            Instantiate(enemy, spawnPosition5, spawnRotation5);
            Instantiate(enemy, spawnPosition6, spawnRotation6);
            yield return new WaitForSeconds(spawnWait);
        }
        yield return new WaitForSeconds(waveWait);
        enemies[0].GetComponent<EnemyBehviour>().currentHealth *= enemyHealthMultiplier;
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-31 15:20:54

  1. 当玩家死后,您需要将gameOver设置为True
  2. 您还需要添加逻辑,将while循环更改为false,以退出while循环。

例如,在while循环中设置gameOver = truecurrentHealth == 0并设置while(gameOver == false)

票数 4
EN

Stack Overflow用户

发布于 2019-03-31 15:29:29

完全修复多亏了@AlexG的指导

代码语言:javascript
复制
void Start () {
    gameOver = false;
    StartCoroutine (SpawnWaves());
}

IEnumerator SpawnWaves()
{
    yield return new WaitForSeconds(startWait);
    while (gameOver != true)
    {
        for (int i = 0; i < hazardCount; i++)
        {
            if(gameOver)break;
            GameObject enemy = enemies[Random.Range(0, enemies.Length)];
            Instantiate(enemy, spawnPosition1, spawnRotation1);
            Instantiate(enemy, spawnPosition2, spawnRotation2);
            Instantiate(enemy, spawnPosition3, spawnRotation3);
            Instantiate(enemy, spawnPosition4, spawnRotation4);
            Instantiate(enemy, spawnPosition5, spawnRotation5);
            Instantiate(enemy, spawnPosition6, spawnRotation6);
            yield return new WaitForSeconds(spawnWait);
        }
        yield return new WaitForSeconds(waveWait);
        enemies[0].GetComponent<EnemyBehviour>().currentHealth *= eenter code herenemyHealthMultiplier;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2019-03-31 15:53:28

ryeMoss实际上有正确的答案。您不需要更改while循环的条件,而是需要确保将引用值传递给StopCoroutine方法。您可以在文档中看到,这正是他们正在做的事情。

问题是,当SpawnWaves被调用时,它返回一个新的IEnumerator,这显然不是您在试图阻止它时想要的,哈哈。

只需在Start方法中更改为

代码语言:javascript
复制
gameOver = false;
waves = SpawnWaves(); <-- or whatever you want to call it
StartCoroutine(waves); <-- using a reference

然后将waves传递给StopCoroutine

一定要仔细阅读文档;在学习新的库、框架等时,它们是您最好的朋友:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55442254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档