Присвоение значения bool в методе не работает - PullRequest
0 голосов
/ 04 марта 2019

Я создал небольшую игру в аркадном стиле, в которой переменная bool отслеживает, закончилась ли игра (gameOver).

private bool gameOver;

Когда препятствие попадает в игрока,выполняется следующий метод:

public void OnCollisionEnter2D(Collision2D other)
{
    //GameOver
    gameOver = true;
}

Следующий метод должен увеличивать счет, только если значение gameOver равно false.

private void OnTriggerEnter2D(Collider2D other)
{
    if (!gameOver)
    {
        if (int.Parse(scoreText.text) == 0)
        {
            scoreText.text = "1";
        }
        else if (int.Parse(scoreText.text) > 0)
        {
            int oldNumber = int.Parse(scoreText.text);
            int newNumber = oldNumber + 1;
            scoreText.text = newNumber.ToString();
        }
    }
    Destroy(gameObject);
}

Но когда игра фактически «проиграна», счет остается увеличивающимся.Я зарегистрировал значение gameOver в разное время, и кажется, что значение gameOver установлено равным true в методе OnCollisionEnter2D, но при входе в метод OnTriggerEnter2D оно говорит false.Я пытался присвоить значение отдельным методом с помощью out-Keyword, но это тоже не сработало.Может кто-нибудь мне помочь?Заранее спасибо.

1 Ответ

0 голосов
/ 04 марта 2019

Вы не изменили gameOver bool в глобальном состоянии, и только одно препятствие знает, что вы проиграли.Самое простое решение:

private static bool gameOver;

Другим решением является сохранение gameOver в синглтоне GameManager, если вы его используете

Вы также можете сохранить это состояние в одном статическом классе:

public static class GameStates
{
    public static bool IsGameOver = false;
    public static int Score = 0;
    //other global states
}

И используйте его без проблем:

if (!GameStates.IsGameOver)
{
    //do something
}

Если вы не хотите использовать статические (это не лучшее решение в единстве) - используйте singleton (не создавайте сложную архитектуру для маленьких игр)

...