Создание диалогов

Добавлен , не публикуется
Раздел:
1. Основы
Диалог - это некое окно с кнопочками. Помните в WC3 тоже были диалоги. Но в SC2 они на много лучше. Нам предоставили большое количество функций по работе с диалогами. Эта статья подробно расскажет о работе с диалогами в Starcraft 2

Введение

Диалог - это некое окно с кнопочками. Помните в WC3 тоже были диалоги. Но в SC2 они на много лучше. Нам предоставили большое кол-во функций по работе с диалогами. И так начнем.

Создание первого диалога

Начало

Для создания диалога нам потребуется сперва создать форму, на которой будут располагаться разные элементы. Сперва объявим переменную типа Dialog, назовем её DialogForm Затем создадим триггер DialogInit. Он выглядит так:
DialogInit
    Events
        Game - Map initialization
    Actions
        Dialog - Create a Modal dialog of size (500, 400) at (0, 0) relative to Center of screen
        Variable - Set DialogForm = (Last created dialog)
Ну а теперь давайте разберем, что мы сделали. Мы создаем форму с размером (500,400) в координатах (0,0) с началом координат в Center (Центр экрана). Затем присвоили переменной DialogForm только что созданное окно. Часть работы сделали. Теперь надо заполнить эту форму.

Заполнение формы

Пустая форма нам совсем не интересна. Поэтому сейчас мы создадим пару кнопок для нашего диалога. Для этого нам понадобиться создать еще одну переменную типа Dialog Item, назовем эту переменную DialogItems. И назначим этой переменной размер массива (Array) равный 1.
Теперь возвращаемся к нашему триггеру. Давайте создадим кнопку для добавления 100 кристалла и кнопку выхода из диалога. Приступим. Начнем с первой.
Добавим в триггер DialogInit новые действия:
        Dialog - Create a Button for Dialog (Last created dialog) with the dimensions (200, 50) anchored to Top Left with an offset of (50, 50) setting the tooltip to "Добавить 100 ед. крис..." with button text "+100 Кр." and the hover image set to ""
        Variable - Set DialogItems[0] = (Last created dialog item)
Здесь мы создаем новую кнопку на только что созданной диалоговой форме. Размером (200,50) в координатах (50,50) с началом координат Top Left (Левый верхний угол формы) с подсказкой "Добавить 100 ед. кристалла" и текстом на кнопке "+100 Кр.". Ну и заносим эту кнопку в массив DialogItems с индексом 0.
Также создаем и кнопку для выхода, только выбрав другие координаты и текст для кнопки и подсказки. Попробуйте сделать сами. Не забудьте занести созданную кнопку в массив! Только на этот раз с индексом 1.

Обработка событий

Ну а теперь давайте реализуем для наших кнопок действия. Для этого нам понадобиться еще один триггер. Назовем его DialogActions. Для простоты в нем создадим локальную переменную типа DialogItem, назовем её useditem. Там же присвоим ей значение использованного объекта диалога (Used Dialog Item). Ну и самое главное это поставить событие. Нам нужно Dialog Item Is Used. Если вы сделали все правильно, то у вас должен получиться такой триггер:
DialogActions
    Events
        Dialog - Any Dialog Item is Clicked by Player Any Player
    Local Variables
        useditem = (Used dialog item) <Dialog Item>
Поскольку мы будем добавлять ресурс, то нам не помешает еще одна локальная переменная типа integer. Назовем её player. Присвоим ей значение функции Triggering Player.
В WC3 была переменная типа player, но в sc2 от неё избавились и заменили её стандартным типом integer. И это очень удобно! Ведь больше не придется использовать доп. функций чтобы взять id игрока или преобразовать id в игрока. В SC2 id - Это и есть игрок
Теперь начнем обработку наших кнопочек. Принцип будет прост. Мы будем проверять является ли useditem одним из объектов массива. Если он является, то выполняем нужные нам действия. И так добавим в триггер следующие действия:
        General - If (Conditions) then do (Actions) else do (Actions)
            If
                useditem == DialogItems[0]
            Then
                Player - Modify player player Minerals: Add 100
            Else
                Dialog - Hide DialogForm for (Player group(player))
Теперь я объясню, почему сделал только одну проверку. Поскольку у нас только две кнопки на форме, то можно проверить только одну, т.к. если использованная кнопка не является первой, то значит это вторая. И так. Если использовали 1ю кнопку, то даем этому игроку 100 кристалла. Если же это была не 1я кнопка (то есть у нас получается 2я), то прячем форму.
Большую часть работы мы сделали, но однако при запуске карты, мы не увидим диалога, т.к. мы его не отобразили! Для этого создадим еще один триггер. Назовем его DialogOpen. Подробно расписывать его не буду. Вкратце скажу, что при нажатии на Shift + G появляется наш диалог.
DialogOpen
    Events
        UI - Player Any Player presses G key Down with shift Require, control Allow, alt Allow
    Actions
        Dialog - Show DialogForm for (Player group((Triggering player)))
Отлично. Теперь давайте запустим игру, нажмем Shift + G и понажимаем на кнопочки нашего диалога.

Вывод

Диалоги SC2 это большая находка для картоделов. С помощью этих диалогов можно создавать разные диалоговые системы, магазины, окно с описанием квестов (в SC2 его нет).

Продвинутое создание диалогов

Содержание

  • Введение
  • Компоненты
    1. Текст (Label)
    2. Картинка (Image)
    3. Флажок (Check Box)
    4. Список (List Box)

Введение

И так мы уже познакомились с основами создания диалогов. Мы создали форму и расположили на ней пару кнопок. Но это далеко не придел, на что способны диалоги SC2.

Компоненты

Диалоги состоят не только из кнопок. Но и текста, картинок, флажков, списков и много другого. Начнем с самого простого. Для практики давайте создадим форму с кучей разных компонентов. Создайте пока что пустую форму и занесите её в переменную DialogExFrom (триггер назовите DialogExInit).

1. Текст (Label)

Текст может быть использован в разных целях на форме. Например для написание какой-то информации. В нашем примере попробуем создать текст "copyrigth by King Ksel" внизу формы. По скольку наши компоненты не будут нести никакой программной части, то можно будет не заносить их в массив. Зайдем в триггер DialogExInit. И добавим такую строчку:
        Dialog - Create a Label for Dialog (Last created dialog) with the dimensions (200, 50) anchored to Bottom Left with an offset of (100, 60) with the text "Copyrigth by King Ksel" color set to White text writeout set to false with a writeout duration of 2.0
Эта функция создает Label (Текст) на форме. Размер её (200,50). Координаты - (100,60) относительно Bottom Left (Нижний левый угол формы).
Также напишем триггер DialogExOpen в котором сделаем открытие формы для нашего диалога, что бы можно было посмотреть наш результат. Запустим SC2 и посмотрим, что у нас получилось. С текстом мы разобрались. Идем дальше.

2. Картинка (Image)

Теперь давайте разберемся с картинками. Картинки имеют много разных параметров (подсказка, тип прозрачности, способ прорисовки и размер). Подходящий формат картинки это dds, насчет tga я не знаю. И так приступим. Дописываем в триггер DialogExInit такую строчку:
        Dialog - Create an Image for Dialog (Last created dialog) with the dimensions (74, 74) anchored to Top Left with an offset of (50, 100) setting the tooltip to "" using the image Assets\Textures\ui_tip_questionmark.dds as a Normal type with tiled set to true tint color White and blend mode Normal
Здесь мы создаем для диалога DialogExForm картику в координатах (50,100) относительно Top Left (Верхнего левого угла диалога). Я взял для примера картинку знака вопроса. Её размер 74х74.
Стоит заметить, что если увеличить размер, то картинка не будет растягиваться, а будет повторяться. То есть поставив ширину картинки как 148, то мы увидим уже 2 знака вопроса. Если размер указать меньше стандартного, то картинка будет обрезаться.
Ну а теперь давайте запустим и посмотрим, что у нас получилось. Все с картинками разобрались. Идем дальше.

3. Флажок (Check Box)

Флажок - это небольшая кнопочка, которая может принимать 2 значения (TRUE/FALSE). Он создается так же просто, как и предыдущие компоненты. Надо просто вызвать специальную функцию для его создания.
В отличии от Флажка в Delphi этот не имеет текста, рядом с кнопкой. Поэтому если он нужен, то придется создавать отдельный компонент Label
Так же добавляем в триггер DialogExInit следующий код
        Dialog - Create a Check Box for Dialog (Last created dialog) with the dimensions (50, 50) anchored to Top Left with an offset of (134, 100) setting the tooltip to "" and default to Checked
Этот код создает Флажок размером (50,50) в координатах (134, 100) относительно Top Left (Верхнего левого угла диалога). И устанавливаем сразу нашему флажку положение Cheked. То есть на нем будет стоять галочка. Ну а теперь давайте запустим и посмотрим, что у нас получилось. Покликайте по нашему свеже сделанному флажку. Меняется? Отлично! Идем дальше.

4. Список (List Box)

На создание этого компонента уйдет намного больше времени, чем уходило на остальные компоненты. Сперва надо создать саму основу списка. Затем надо будет установить нужный размер и откорректировать положение в диалоге. И на последок добавить нужные пункты в список. Один пункт в списке по высоте равен примерно 45. Это стоит учесть. Для примера мы создадим 5 пунктов: жизнь, энергия, броня, атака, щит. Чтобы все это реализовать надо прописать следующий код в триггере DialogExInit
        Dialog - Create a List Box for Dialog (Last created dialog)
        Dialog - Move (Last created dialog item) to (200, 100) relative to Top Left of dialog for (All players)
        Dialog - Set (Last created dialog item) size to (200, 270) for (All players)
        Dialog - Add list item "Жизнь" to (Last created dialog item) for (All players)
        Dialog - Add list item "Энергия" to (Last created dialog item) for (All players)
        Dialog - Add list item "Броня" to (Last created dialog item) for (All players)
        Dialog - Add list item "Атака" to (Last created dialog item) for (All players)
        Dialog - Add list item "Щит" to (Last created dialog item) for (All players)
Не ожидали, что выйдет так много? Ну а теперь я все вам поясню. Сперва мы создаем компонент, типа Список. Затем мы его перемещаем по форме в координаты (200,100) относительно Top Left (Верхний левый угол диалога). После, мы изменяем размер списка на (200,270). Ну и в конце мы добавляем те самые пять пунктов. В результате у нас должен получиться список. Проверяем.

Итог

Мы научились создавать более сложные диалоги. И это далеко не все компоненты диалогов. Но мы познакомились только с самыми основными. Дерзайте!
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
30
14 лет назад
0
опиши ещё как создавать диалоги без паузы игры =)
ужасный перевод, в половине мест копипастил лишнего...
King Ksel
относительно Top Left (Верхний левый угол диалога). После мы изменяем размер списка на (200,270). Ну и в конце мы добавляем те самые пять пунктов. В результате у нас должен получиться список. Проверяем.
Не ожидали, что выйдет так много? И так поясняю. Сперва мы создаем
Итог
2
29
14 лет назад
2
Это не перевод. Я сам писал эту статью.
опиши ещё как создавать диалоги без паузы игры =)
а они и так без паузы
0
30
14 лет назад
0
просто перечитай свою статью внимательно и вдумчиво и узришь кучу проблем
2 комментария удалено
2
29
14 лет назад
2
Какой там набор параметров на месте слова "Modal"?
Modal и Non-Modal
Clamp, просто я писал статью за один присест и дважды переписывал последний раздел.
А то что в некоторых местах повторяется это у меня систра мышку пощелкала вот опера и заглючила
0
30
14 лет назад
0
ну ты там попроси модеров переделать всё таки
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.