JavaScript приостанавливает выполнение функции для ожидания ввода пользователя

Я пытаюсь создать своего рода игру, используя холст HTML5, JavaScript и XML. Идея состоит в том, что вы можете сделать тест, поместив вопросы и ответы в XML-файл. Я написал основной цикл, который перебирает все вопросы, ставит их и проверяет правильность ответа. Сейчас я просто использую предупреждения и диалоговые окна, чтобы отвечать на вопросы. Проблема в том, что мой основной цикл - это одно большое взаимосвязанное целое, которое проходит через всю игру от начала до конца, и вместо окон с предупреждениями, задающих вопросы, и диалоговых окон для ответа, сразу одно за другим, мне нужно некоторое взаимодействие с пользователем. Ответы на вопросы появляются в прямоугольниках внизу экрана, и пользователь может управлять краном, чтобы выбрать правильный ответ. Вот фрагмент кода из основного цикла, в котором я застрял:

answer = loadQuestion(i);
            if (answer == "correct") {
                // answered correctly, update scoreArray and load next question
                scoreArray[currentQuestion] = "correct";
                // show 'next'-button and wait for press to continue

            } else {
                // answered incorrectly again, update scoreArray and load next question
                scoreArray[currentQuestion] = "error";
                // show 'next'-button and wait for press to continue

            }

Как видите, я вызываю loadQuestion, который мгновенно загружает вопрос, показывает возможные ответы, а пока сразу вызывает диалоговое окно, в котором вы можете введите ответ. Этот ответ возвращен и подтвержден.

Я уже запрограммировал управление краном, пользователь уже может поднять коробку с ним. Но поскольку я вызываю loadQuestion и ожидаю, что он вернет значение, это не сработает. Как сделать мой основной цикл «приостановленным» до тех пор, пока игрок, использующий подъемный кран, не ответит, а затем продолжить? Я уже пробовал сделать ответ глобальной переменной и просто иметь пустой while answer == "" , чтобы функция не делала ничего, пока ответ не получит значение, но это просто замораживает скрипт. Я также возился с интервалами, пытаясь отслеживать состояние переменной ответа, очищать интервал и возвращать значение, когда это происходит, но это просто возвращает false, поскольку функция завершается без немедленного возврата значения.

9
задан Marc 7 December 2015 в 21:05
поделиться