Цикл while не позволяет пользователю выбрать второе действие?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Цикл while не позволяет пользователю выбрать второе действие?

Сообщение Anonymous »

Я уже давно застрял в этой проблеме, поэтому сдаюсь и решил обратиться за помощью. Я делаю пошаговую ролевую игру, и во время хода игрока у каждого юнита есть несколько очков действия, игра проходит через PlayerTurn и добавляет выбранные действия в очередь, а затем выполняет все действия в строке. Однако мой цикл while не позволяет игроку выбрать второе действие, он просто повторяет первое действие (например, «атака») во время цикла.
private IEnumerator PlayerTurn(CharacterBase playerUnit)
{
actionPoints = 2; // Reset action points for player turn
actionQueue.Clear(); // Clear previous actions
selectedTarget = null; // reset selected target

playerUnit.ResetGuard(); // Reset the guard for the current player unit

// phase 1 - Action Selection
while (actionPoints > 0)
{
Debug.Log($"Player {playerUnit.characterStatus.charName} has {actionPoints} action points remaining.");
selectedAction = null; // Reset selected action before waiting for player input
Debug.Log("selectedAction reset to null");

yield return StartCoroutine(WaitForPlayerAction()); // Wait for the player to select an action via input

if (!string.IsNullOrEmpty(selectedAction))
{
actionQueue.Add(selectedAction);
Debug.Log($"Action added: {selectedAction}. Remaining Action Points: {actionPoints}");
}

}

private IEnumerator WaitForPlayerAction()
{
Debug.Log("Waiting for player to select an action...");
while (selectedAction == null)
{
// Replace these with your actual input or UI handling code
if (Input.GetKeyDown(KeyCode.Z) && actionPoints >= 1) // Example: Attack
{
selectedAction = "Attack";
actionPoints--;
Debug.Log("Player chose Attack");
}
else if (Input.GetKeyDown(KeyCode.X) && actionPoints >= 2) // Example: Magic
{
selectedAction = "Magic";
actionPoints -= 2;
Debug.Log("Player chose Magic");
}
else if (Input.GetKeyDown(KeyCode.C) && actionPoints >= 1) // Example: Guard
{
selectedAction = "Guard";
actionPoints--;
Debug.Log("Player chose Guard");
}
yield return null; // wait for the next frame
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ond-action
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»