Интерактивные истории, текстовые игры и квесты
Регистрация / Вход
Посетите наш новый сайт AXMAJS.RU
Автоматическая прокрутка текста
Борис Семёнов (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.
Профиль
Закрыть
Для того, чтобы оставлять комментарии, необходимо зарегистрироваться и подтвердить в профиле указанный
При использовании любых материалов блога обязательно указание ссылки на источник
Классная идея!