IndexOutOfRange, когда игрок достигает maxLevel - PullRequest
0 голосов
/ 12 января 2020

У меня проблемы с этим кодом, я получаю ошибку IndexOutOfRange каждый раз, когда игрок нажимает на maxLevel. После нажатия на maxLevel currentEXP будет сброшен до 0, только после повторного нажатия клавиши «K».

Unity Inspector View

Может быть, я пропускаю еще один оператор if. Может быть, в то время как-l oop? Заканчивать время-l oop? В каком состоянии это будет?

 // Start is called before the first frame update
void Start()
{
    expToNextLevel = new int[maxLevel];
    expToNextLevel[1] = baseEXP;

    for (int i = 2; i < expToNextLevel.Length; i++)
    {
        expToNextLevel[i] = Mathf.FloorToInt(expToNextLevel[i - 1] * 1.3f);
    }
}

// Update is called once per frame
void Update()
{
    if (Input.GetKeyDown(KeyCode.K))
    {
        AddExp(100);
    }
}

//Adds EXP and levels up the character
public void AddExp(int expToAdd)
{
    currentEXP += expToAdd;

    //performs functions as long as playerLevel doesn't exceed maxLevel
    if (playerLevel < maxLevel)
    {
        //level up to the equivalent level with all the exp gain up to that level
        while (currentEXP > expToNextLevel[playerLevel])
        {
                currentEXP -= expToNextLevel[playerLevel];
                playerLevel++;
        }

    } else {
        currentEXP = 0;
    }
}

1 Ответ

1 голос
/ 12 января 2020

Вместо того, чтобы проверять, есть ли у игрока максимальный уровень, просто запустите код, чтобы выровнять персонажа до тех пор, пока игрок не достигнет максимального уровня или пока не закончится опыт. Затем проверьте, нужно ли вам сбросить currentExp

public void AddExp(int expToAdd)
{
    currentEXP += expToAdd;

    // while the player is not max level, level up to the equivalent level with 
    // all the exp gain up to that level
    while (playerLevel < maxLevel && currentEXP > expToNextLevel[playerLevel])
    {
        currentEXP -= expToNextLevel[playerLevel];
        playerLevel++;
    }

    // If the player has reached max level reset the current EXP
    if (playerLevel >= maxLevel) 
    {
        currentEXP = 0;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...