Авторизация
×

Логин (e-mail)

Пароль

Интерактивные истории, текстовые игры, квесты и визуальные новеллы
Гиперкнига

Библиотека    Блог

Автоматическая прокрутка текста

Борис Семёнов (Morych), 16.06.13 | Практика ASM

Как вы, наверняка, знаете из руководства пользователя, для создания в истории каких-либо автоматических событий, не зависящих от действий читателя, предназначен специальный макрос repeat.

Мы воспользуемся этим макросом для автоматического обновления экрана и создания эффекта прокрутки текста. Такой эффект можно использовать, к примеру, для оформления предыстории к игре («давным-давно, в далёкой, далёкой галактике...»). А ещё таким образом можно оформить финальные титры (обязательно под стильную музыку).

Вот так примерно это будет выглядеть:

А вот и полный код тестовой истории:

:: StoryTitle
Автоматическая прокрутка текста

:: Start
[[Прокрутка текста|Тест]]

:: Тест
# номер строки
<<set $scrollNumber = 1>>
# всего строк включая пустые
<<set $scrollMax = 16>>
# направление прокрутки: true -- вверх, false -- вниз
<<set $scrollDirection = true>>
<<set $scrollText = []>>
# число повторений цикла -- это высота экрана прокрутки
<<loop 7>>
    <<set $scrollText.push("")>>
<<endloop>>
<<repeat 'ПрокруткаТекста' 1>>
<<display 'ПрокруткаТекста'>>

:: ПрокруткаТекста
<<clrscr>>
----
===<<print $scrollText.join("<br>")>><<br>>===
----
<<if $scrollNumber eq 1>>
    <<set $scrollNewLine = "* * *">>
<<elseif $scrollNumber eq 2>>
    <<set $scrollNewLine = "Пример использования">>
<<elseif $scrollNumber eq 3>>
    <<set $scrollNewLine = "макроса «repeat»">>
<<elseif $scrollNumber eq 4>>
    <<set $scrollNewLine = "для автоматической">>
<<elseif $scrollNumber eq 5>>
    <<set $scrollNewLine = "прокрутки текста">>
<<elseif $scrollNumber eq 6>>
    <<set $scrollNewLine = "в «AXMA Story Maker»">>
<<elseif $scrollNumber eq 7>>
    <<set $scrollNewLine = "* * *">>
<<else>>
    <<set $scrollNewLine = "">>
<<endif>>
<<if $scrollDirection>>
    <<set $i = $scrollText.shift()>>
    <<set $scrollText.push($scrollNewLine)>>
<<else>>
    <<set $i = $scrollText.pop()>>
    <<set $scrollText.unshift($scrollNewLine)>>
<<endif>>
<<set $scrollNumber++>>
<<if $scrollNumber gt $scrollMax>>
    <<stop 'ПрокруткаТекста'>>
    ===Прокрутка завершена.===
<<endif>>

Отображаемые в каждый момент строки хранятся в списке (объект $scrollText). Изначально мы заполнили его пустыми строками при помощи макросов цикла (loop и endloop). Сколько элементов будет содержать список, такова и будет высота прокручиваемой области.

В макросе repeat устанавливается название повторяющегося параграфа и интервал повтора (в секундах). Сразу после макроса repeat вызываем этот параграф макросом display, чтобы не ждать одну секунду до первого повторения.

Параграф ПрокруткаТекста должен начинаться с макроса очистки экрана clrscr, поскольку повторяющиеся параграфы всегда добавляются к текущему. Для вывода строк текста на экран используем метод объектов-списков join, который склеивает все элементы списка в одну строку через разделитель. В качестве разделителя зададим html-тег разрыва строки (<br>). Или же можно пробежаться по всем элементам списка в цикле и вывести каждую строку по отдельности:

<<set $i = 0>><<loop $scrollText.length>>===<<print $scrollText[$i]>><<br>>===<<set $i++>><<endloop>>

Записывать все макросы в данном случае следует в одну строку.

Следующим шагом нужно удалить из списка элемент с одной стороны и добавить новый элемент с другой стороны. В зависимости от направления прокрутки ($scrollDirection) извлекаем из списка первый элемент (метод shift) для прокрутки вверх или последний (метод pop) для прокрутки вниз. Соответственно новый элемент добавляем или в конец списка (метод push) или в начало (метод unshift). Новую строку будем выбирать в зависимости от значения объекта $scrollNumber. В примере новые строки добавляются последовательно, но можно при необходимости добавлять их и в случайном порядке (как сделано в игре «Чёрный ящик»).

Как только весь текст будет прокручен за границу видимой области, останавливаем повторение параграфа макросом stop.

Если решите оформлять прокруткой предысторию к игре, обязательно добавьте ссылку для быстрого перехода непосредственно к игре без просмотра предыстории для тех игроков, которые запустили игру не в первый раз.

Комментарии: 1.

Профиль


Закрыть
Mo555
15.01.17 06:48

Классная идея!

Для того, чтобы оставлять комментарии, необходимо зарегистрироваться и подтвердить в профиле указанный e-mail адрес.

При использовании любых материалов блога обязательно указание ссылки на источник