Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
19.9. Как обновлять переменные на экране?
В: Как обновлять переменные на экране?
О:
Очень частый вопрос, который происходит от непонимания того, в каком порядке плеер выполняет код.
Например, автор пишет вывод здоровья в окне дополнительного описания так:
Переменная `health` в данном случае показывает уровень здоровья главного героя. Далее автор меняет значение переменной
И ожидает, что и на экране значение изменится, но в окне дополнительного описания изменения не происходят.
А всё дело в том, что плеер выполняет команды последовательно, а кроме выполнения команд ничего иного делать не умеет.
Когда плеер выполняет команду
Происходит следующее:
- Плеер видит оператор `pl` и понимает, что ему нужно вывести некий текст в окно дополнительного описания. Данный текст плееру передан в виде конкретного значения, однако в этом значении присутствует подвыражение "<<health>>" (так же оно называется вложенным выражением).
Плеер "раскрывает" подвыражение. То есть вычисляет его значение и подставляет это значение вместо подвыражения в строку. Например, если значение переменной `health` в этот момент было равно 50, плеер подставит число 50 вместо подвыражения, и теперь команда будет для него выглядеть так:
pl "Ваше здоровье 50/100"
- Строка передаётся оператору `pl`, и оператор `pl` выводит строку в окно дополнительного описания, что собственно и видит игрок.
Что же происходит, когда выполняется команда
А вот что. Плеер вычисляет значение выражения `health+20`, подставляя значение переменной `health` (равно 50), и получает конкретное значение (50+20 равно 70), и уже это конкретное значение возвращает переменной `health` (теперь в переменной `health` значение 70). И всё. Здесь нет указания плееру "обновить" значение на экране. Только вычислить.
Чтобы значение в окне дополнительного описания "обновилось", нужно:
- Стереть старое значение в окне дополнительного описания
- Вывести новое значение в окне дополнительного описания
Простой код для этого:
health=health+20
! стираем весь текст из окна доп.описания
clr
! выводим новый текст на экран
pl "Ваше здоровье <<health>>/100"
Таким образом всякий раз, изменив значение переменной, вам нужно повторно вывести его на экран, чтобы игрок увидел "обновление" этого значения.