Главная » Статьи » Редакторы игрового контента » Статьи редактор WarCraft |
Данная статья расскажет вам, как надо нормально и правильно создавать MultiBoard, или в русской версии WE Меню паузы (но дальше мы будем называть ее просто MultiBoard-ом). Это статья состоит из четырех частей, первая – введение, во второй я расскажу о теории создания MultiBoard-а, и обо всех действиях ему присущих, в третьей раскажу о некоторых хитростях и фичах мультиборда, а в четвертой перейдем непосредственно к практике, и попробуем создать свой простенький MultiBoard.
Введение Думаю, вы все уже видели MultiBoard, т.к. не одна хорошая, или даже просто не плохая ката, не обходится без этой поистине уникальной вещи. MultiBoard может содержать в себе очень много информации, и притом совершенно не мешает окружению игры, т.к. ОчЕнЬ компактно складывается, в отличие от LeaderBoard. Его применение не ограничивается просто выводом информации, также его можно использовать во многих других по истине разнообразных целях: 1. Можно сделать часики и результат будет превосходить по качеству даже действия, типа – Обратный отсчет.
Теория Что нужно сделать, чтобы создать MultiBoard: Нужно использовать действие: Меню паузы – Create. Пример: Code Create a multiboard with 3 columns and 2 rows, titled "Мультиборд" Что означает это действие? Означает то, что будет создан MultiBoard под названием “Мультиборд” с 3-мя столбцами и 2 строчками. Чтобы поменять глаз на другую иконку надо воспользоваться действием “Меню паузы – Set Item Icon”: Пример: Code Set the icon for (Last created multiboard) item in column 2, row 1 to UI\Feedback\Resources\ResourceGold.blp После этого действия в последнем созданном MultiBoard-е в 1 строчке 2 столбца если иконка не скрыта то она примет вид монетки, потому что “ UI\Feedback\Resources\ResourceGold.blp” - Путь, указывающий на ее текстуру. С тем же успехом можно поставить и другую текстуру, а лучше щелкнуть кнопку “Выбрать пиктограмму” и выбрать ту иконку чья текстура нам нужна. Пример: Code Set text for (Last created multiboard) item in column 2, row 2 to “Надпись” В результате во 2 столбце 2 строчки правее от иконки появится Текст - “Надпись”. Пример: Code Set the width for (Last created multiboard) Item in column 2, row 2 to 5.00% of total screen width Ну, в принципе 1% может измеряться как длина одной иконки ну или ~0.5 см., и действие будет означать, что во 2 столбце 2 строчки расстояние, отведенное для текста, будет ровняться 1.5 см. от иконки. Почему 1.5 см.? Подсчет расстояния начинается с левой стороны иконки если длину поставит 1% то текста вообще не будет видно т.к. вместо текста сразу будет следовать следующая иконка. а если 0%, то эта иконка будет поверх следующей. Меню паузы – Set Item Color. Пример: Code Set the color for (Last created multiboard) item in column 2, row 2 to (100%, 0%, 0%) with 25% transparency. Будет означать, что в 2 столбце 2 строки текст поменяет свой цвет на чуть прозрачно красный, почему именно красный, потому что все цветы определяются по технологии RGB (RedGreenBlue) по трем цифрам, от 0 до 255, но у нас стоят проценты, и за 255 принято 100%, значит получилось что - 100% красный, 0% зеленый, 0% синий. В действии есть еще 4 число, оно определяет прозрачность текста, у нас стоит 20% “прозрачности”, обратите внимании не “видимости”, а ”прозрачности”. Также можно поменять название мультиборда (Меню паузы – Change Title) Можно также скрывать иконки и тексты: Меню паузы - Set Item Display Style Пример: Code Set the display style for (last created multiboard) item in column [u]2[/u], row [u]2[/u] to [u]Скрыть[/u] text and [u]Показать[/u] icons. Получится что в указанном месте исчезнет иконка, можно также скрыть текст (не удалить, а просто скрыть), а можно и то и другое. Событие Меню паузы – Destroy, Полностью удаляет MultiBoard. Запомните: Хитрости и фичи 1. Если при оформлении Мультиборд в одном из его действий в значении столбца/строчки поставить "0", то в этом случае действие произойдет на все столбики/строчки Например: Code Set the color for ([u]Last created multiboard[/u]) item in column [u]2[/u], row [u]0[/u] to ([u]100%[/u], [u]0%[/u], [u]0%[/u]) with 0% transparency. В этом случае Весь текст находящийся во 2-ом столбике станет красным, тоже правило действие если указать "0" в номере строчке. Code Событие Map initialization Условие Дейсвие Set player = 0 For each (Integer A) from 1 to 12, do (Actions) Цыкл - Действия If (All Conditions are True) then do (Then Actions) else do (Else Actions) Если - Условие ((Player((Integer A))) slot status) равно "Играет"‚ То - Действия Set player = (player + 1) Set MBplayer[player] = (Player((Integer A))) Иначе - Действия И что же у нас получилось? Объясняю: И зачем же это все нужно? 1. 2 - строки заголовки В общей сумме получается так: 3 + player строк. Далее, зачем нам понадобилась переменая [b]MBplayer? т.к. есть такая функция "Преобразование - Convert Player Index To Player" она может пригодится для multiboard-а, а именно в использовании цикла на распределение очков убийств, но эта функция определяет игрока по его номеру, но такое в данном случае не выйдет (потому что у нас совершено иной набор игроков) и потому вместо этой функции мы будем использовать переменную MBplayer, которая содержит тот набор который нам нужен. Примечание: Если вы еще будете где использовать какие либо действия со всеми игроками, используйте этот также от 1 до player-а, т.к., опят повторю, больше не требуется. Остался таймер... обьеснять как его делать небуду обьесню тока что строка таймера у нас всегда разная, но она будет всегда ровна 3+player, вот вроде бы и примерное объяснение такого multiboard-а...
Code local integer i = 1 call TriggerSleepAction( 0.01 ) loop exitwhen i > 12 set udg_Multiboard[i] = CreateMultiboardBJ( Columns, Rows, "Title" ) call MultiboardDisplayBJ( false, udg_Multiboard[i] ) set i = i + 1 endloop set i = 1 loop exitwhen i > 12 if ConvertedPlayer(i) == GetLocalPlayer() then call MultiboardDisplayBJ( true, udg_Multiboard[i] ) endif set i = i + 1 endloop данный код Создаст 12 multiboard, каждый из них, будет помещен в переменную multiboard, от 1 до 12 ячеек, multiboard/[b] из первой ячейки будет показан 1-ому игроку, [b]multiboard из 2-ой ячейки будет показан 2-ому и т.д. Примечание: Вообще-то было бы лучше если будет использован пункт 2 из данной части статьи, и при последующем создавании multiboard-а он создавался циклом не для всех игроков (играющих и не играющих), а для только играющих, через переменную player ну вот и все... Практика Действия я подробно расписывать не буду, т.к. если вы внимательно хотя бы 2 раза прочитали “теорию” у вас не должно возникнуть с этим проблем, и вы должны стараться справится сами, т.к. практика учит быстрее теории. В конце статьи прикреплен файл, с уже сделанным MultiBoard-ом о котором будет идти речь, вы можете посмотреть его, НО, суть практики не в том чтобы смотреть уже сделанную работу, а в том чтобы самому ее сделать, настоятельно рекомендуется сначала попробовать самим, хоть даже если и покажется сложным. Сделаем multiboard который будет отображать жив юнит или мертв, если мертв то через какое время. Состояние юнита
Создадим простенький MultiBoard Инструкция Для начала создадим карту, удалим все действия из триггера “Initialization”, и первое что поставим это “Wait 0.1”, после создаем MultiBoard c 2-я столбцами и 3-я строчками, назовем этот MultiBoard “Состояние юнита”. Далее можно пользоваться циклами, но так как предполагается что читатель – новичок, будем делать без циклов - просто по порядку. (Чтобы было меньше писать столбики и строчки будем обозначать так: x-y, где X- столбцы, Y – строчки.) Code Действия: -на позицию 1-1 припишем текст “Имя:” -на позицию 2-1 припишем текст “Состояние:” //Мультиборд у нас будет ввиде таблици, и выше перечисленные тексты, это будут заголовки столбцов. -на позицию 1-2 припишем текст “Артес-” -на позицию 1-3 припишем текст “Илидан-” //Эти имена будет стоять в колонке "Имя", и они будут неизменны. -на позицию 2-2 и 2-3 припишем текст “Жив”. //Эта будет стоять в колонке "Состояние", и они будут Менятся по ходу игры. //Следующее что надо сделать, это оформит, определим расстояние для каждого текста: -на позицию 1-1, 1-2, 1-3, делаем расстояние 5%. -на позицию 2-1, 2-2, 2-3, делаем расстояние 7%, думаю, хватит. //Сейчас у нас готов MultiBoard, но он крайне некрасив - все слова написаны белыми буквами. //Так что следующий шаг, это дизайн: -Цвет названия делаем красным (100%, 0%, 0%) -Цвет текста (1-1 и 2-1) делаем, синим (0%, 0%, 100%) -Цвет текста (1-2 и 1-3) делаем зеленым (0%, 100%, 0%) -Цвет текста (2-2 и 3-3) делаем желтым (0%, 100%, 100%) Все первый триггер у нас готов. Делаем следующий триггер. Code Событие Generic Unit Event, Юнит умирает. В действиях: Создаем 2 действия – If / Then / Else, Multiple Functions. В первом ставим, что: Если: Умерший юнит = Артес То: Set OTC4ET (1) = 30 //Далее без циклов тут не обойтись потому создаем цикл For each (integer <img src="http://s19.ucoz.net/sm/15/cool.gif" border="0" align="absmiddle" alt="cool"> from 1 to 30, do (Actions) Цикл – Действия //Далее делаем в позиции 2-2, текст использую пару функций (Делаем действие создание текста с функцией (Мертв(+((String(OTC4ET(1)))+сек.))) //Что это значит? Это означает что создастся текст “Мертв(" + "[текущее значение переменной OTC4ET(1)]" + "сек.)” //Далее, конечно же, ставим действие: Set OTC4ET (1) = OTC4ET (1) - 1 Wait 1.00 game-time second //На этом цикл закончился. (Создаем текст в позиции 2-2 “Жив”) //И ставим действие возрождение героя: Герой – Instantly revive (Triggering unit at (Position of (Triggering unit), Показать revival graphics)) //Все //(В следующем действии (If / Then / Else) ставим ВСЕ ТО ЖЕ САМОЕ только заменяем в условии Илидана на Артеса //а во всех действиях создания текста в MultiBoard-е заменяем 2-2 на 2-3. И везде используем переменную не OTC4ET(1), а OTC4ETT(2). Теперь запустите карту, и убейте любого юнита другим юнитом и посмотрите на MultiBoar. Правда, здорово . | |
Просмотров: 1432 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |