|
Диалоговые сообщения
Диалоговые сообщения используются в игровом
процессе, чтобы показать, что тот или иной персонаж, а так же голос за
кадром,
желают вам сообщить. Чаще всего во время диалога игра
приостанавливается, и выводится текст в прямоугольном окне с рамкой.
Далее следует ожидание нажатия игроком клавиши 'применить' (action
key). После чего диалог закрывается, и игра может продолжаться.
Возможно открытие нескольких диалоговых окон одно за другим, отображая
разговор с персонажем или какую-либо более подробную информацию, не
помещающуюся в одном окне.
Чтобы увидеть простейшие диалоговые сообщения, просто запустите
демонстрационную игру (default template game), загрузив приложение dizzy.exe.
После короткого загрузочного экрана начинается игра. Так как
демонстрационный пример - это всего лишь отправная точка для ваших
собственных проектов, он представляет из себя маленький кусочек игры.
В нем Диззи появляется внутри очень простой комнаты, и печатается
сообщение
приветствия "HELLO WORLD!".
Нажмите клавишу 'использовать' (ENTER), и диалоговое окно закроется.
После чего можно походить персонажем по комнате, нажимая
клавиши-стрелки.
Функции вывода
сообщений
Давайте посмотрим, как делается вывод
сообщений. Откройте вашим любимым текстовым редактором файл game.gs из папки data/scripts, и наберите в
поиске фразу "HELLO WORLD!". Вы найдете ее в конце функции BeginNewGame,
которая вызывается каждый раз в начале новой игры. В этом месте
программы открывается диалоговое окно с помощью функции Message.
Вот этот фрагмент:
Попробуйте изменить приветственную фразу с "HELLO
WORLD!" на "HELLO EVERYONE!". Сохраните файл game.gs на диск, и
запустите игру заново, чтобы увидеть различия. Видите, как все просто!
|
Message( x, y, text, textcolor,
bordercolor )
Эта фоновая (latent) функция приостанавливает игру и открывает
диалоговое окно заданного цвета по выбранным координатам. Затем она
ожидает нажатие пользователем клавиши 'использовать'. Поскольку это
фоновая функция, то и вызываться она может только из фоновых функций.
MessagePop()
Эта функция закрывает все открытые диалоговые окна и продолжает игру.
Обычно она применяется вслед за функцией Message.
Обе эти функции находятся в файле messages.gs.
|
Координаты диалоговых окон x и y - указывают
координаты верхнего левого угла текстовой области окна (без
учета рамки), относительно верхнего левого угла комнаты. Заметим, что
координаты указываются не в пикселях, а в знакоместах размером 8x8
точек. Отслеживанием того, чтобы текст не вылез за пределы диалогового
окна, занимается сама функция Messgage, если, конечно, размер текста не
уж очень большой.
В тексте может использоваться символ перехода на новую строку /n. А сам текст должен быть
набран БОЛЬШИМИ БУКВАМИ.
Цвет текста и рамки обычно записывается в шестнадцатеричном
виде, или используются предопределенные целочисленные константы, как
показано в следующем примере, где константа COLOR_MAGENTA
означает цвет 0xFFFF00FF (определение констант смотрите в файле def.gs) .
Теперь давайте добавим второе диалоговое окно
вслед за первым. Допишите следующий фрагмент кода в самый конец функции
BeginNewGame.
Сохраните файл и запустите игру. Теперь, после того, как вы закроете
первое сообщение, появится еще одно. Как вы видите, в нем уже синий
текст и красный бордюр, в соответствие с заданными цветами. А
располагается оно левом верхнем углу комнаты.
Давайте закомментируем вызов функции MessagePop,
идущий после вывода первого сообщения, и посмотрим, что получится.
После нажатия клавиши, первое сообщение больше не закрывается, и мы
видим на экране одновременно два сообщения, причем последнее из них
закрывает часть первого.
Это называется каскадными
сообщениями (cascade messages), и они широко используются
в диалогах с персонажами в играх про Диззи.
|
Чтобы облегчить задачу разработчику, и не
заставлять его описывать цвета для каждого сообщения, существуют
функции с уже определенными цветами.
Message0( x, y, text )
Сообщение голоса за кадром, белый текст и
красная рамка.
Message1( x, y, text )
Сообщение игрока, фиолетовый цвет и зеленая рамка.
Message2( x, y, text, [text_color] )
Сообщения других персонажей, белый текст [по умолчанию], и зеленая
рамка.
Так же, вы можете отредактировать эти функции в файле messages.gs, или добавить новые.
|
|
BeginNewGame()
Этот фоновой колбек запрашивается функцией HandlerGameStart
из главного меню, каждый раз, когда начинается новая игра. Внутри этой функции
устанавливается позиция игрока, выбирается музыка, запускается интро
или делаются другие подобные вещи.
|
Домашняя работа
Поэкспериментируйте с диалоговыми сообщениями. Пооткрывайте их по разным
координатам, разными цветами, для того, чтобы удостовериться, что вы
правильно понимаете механизм их работы. В дальнейшем в этой книге мы
еще раз коснемся диалогов, а так же рассмотрим, как можно использовать их для
построения интерактивных меню.
Чтобы подробнее изучить диалоговые сообщения,
почитайте следующие главы:
функций
сообщений
диалоговые функции
диалоговые
переменные и функции движка.
|
|
|