6. ДИАЛОГИ
сообщения, позиция, рамки, цвета




Диалоговые сообщения

Диалоговые сообщения используются в игровом процессе, чтобы показать, что тот или иной персонаж, а так же голос за кадром, желают вам сообщить. Чаще всего во время диалога игра приостанавливается, и выводится текст в прямоугольном окне с рамкой. Далее следует ожидание нажатия игроком клавиши 'применить' (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 из главного меню, каждый раз, когда начинается новая игра. Внутри этой функции устанавливается позиция игрока, выбирается музыка, запускается интро или делаются другие подобные вещи. 


Домашняя работа

Поэкспериментируйте с диалоговыми сообщениями. Пооткрывайте их по разным координатам, разными цветами, для того, чтобы удостовериться, что вы правильно понимаете механизм их работы. В дальнейшем в этой книге мы еще раз коснемся диалогов, а так же рассмотрим, как можно использовать их для построения интерактивных меню.

Чтобы подробнее изучить диалоговые сообщения, почитайте следующие главы:
функций сообщений
диалоговые функции
диалоговые переменные и функции движка.





 

Hosted by uCoz