Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

19.9. Как обновлять переменные на экране?

В: Как обновлять переменные на экране?

О:

Очень частый вопрос, который происходит от непонимания того, в каком порядке плеер выполняет код.

Например, автор пишет вывод здоровья в окне дополнительного описания так:

pl "Ваше здоровье <<health>>/100"

Переменная `health` в данном случае показывает уровень здоровья главного героя. Далее автор меняет значение переменной

health=health+20

И ожидает, что и на экране значение изменится, но в окне дополнительного описания изменения не происходят.

А всё дело в том, что плеер выполняет команды последовательно, а кроме выполнения команд ничего иного делать не умеет.

Когда плеер выполняет команду

pl "Ваше здоровье <<health>>/100"

Происходит следующее:

  1. Плеер видит оператор `pl` и понимает, что ему нужно вывести некий текст в окно дополнительного описания. Данный текст плееру передан в виде конкретного значения, однако в этом значении присутствует подвыражение "<<health>>" (так же оно называется вложенным выражением).
  2. Плеер "раскрывает" подвыражение. То есть вычисляет его значение и подставляет это значение вместо подвыражения в строку. Например, если значение переменной `health` в этот момент было равно 50, плеер подставит число 50 вместо подвыражения, и теперь команда будет для него выглядеть так:

    pl "Ваше здоровье 50/100"
  3. Строка передаётся оператору `pl`, и оператор `pl` выводит строку в окно дополнительного описания, что собственно и видит игрок.

Что же происходит, когда выполняется команда

health=health+20

А вот что. Плеер вычисляет значение выражения `health+20`, подставляя значение переменной `health` (равно 50), и получает конкретное значение (50+20 равно 70), и уже это конкретное значение возвращает переменной `health` (теперь в переменной `health` значение 70). И всё. Здесь нет указания плееру "обновить" значение на экране. Только вычислить.

Чтобы значение в окне дополнительного описания "обновилось", нужно:

  1. Стереть старое значение в окне дополнительного описания
  2. Вывести новое значение в окне дополнительного описания

Простой код для этого:

! меняем значение переменной
health=health+20
! стираем весь текст из окна доп.описания
clr
! выводим новый текст на экран
pl "Ваше здоровье <<health>>/100"

Таким образом всякий раз, изменив значение переменной, вам нужно повторно вывести его на экран, чтобы игрок увидел "обновление" этого значения.