www.wc3maps.clan.su


Вторник, 21.05.2024, 07:38


Приветствую Вас Гость | RSS


Главная | Статьи по Warcraft 3 Картостроения истирия Дота warcraft 3 | Регистрация | Вход
Меню сайта

категории
Статьи о картостроении [75]
Статьи о картостроении

Нашь опрос
Какой жанр карт вы предпочитаете?
Всего ответов: 3130

Статистика
Яндекс.Метрика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа


Майки

Главная » Статьи » Картостроение » Статьи о картостроении

Мультиборд
Что же

Что же нужно сделать, чтобы создать MultiBoard?
Нужно использовать действие: Меню паузы – Create.
Пример:
Create a multiboard with 3 columns and 2 rows, titled "Мультиборд"

Это действие приводит к тому, что будет создан MultiBoard под названием “Мультиборд” с 3-мя столбцами и 2 строчками. (сам MultiBoard - это таблица, которая состоит из столбиков и строчек, например, как MO Excel)
Вы можете попробовать, но учтите, что MultiBoard не может быть одновременно создан во время загрузки карты, и поэтому перед его созданием ставьте событие Wait 0.1 (Но также можно обойтись без Wait- указав в событии не Map initialization, а время - Elapsed game time is 0 seconds). А теперь попробуйте сами создать MultiBoard.
Вы заметили, что во время игры появилась какая-то шести-глазая лажа).
Это связано с тем, что по умолчанию стоит иконка в виде глаза (исправить это можно в игровом интерфейсе), а так как у нас 3 столбца и 2 строчки, то создается 6 иконок и текстов, расположенных правее их. Но так как тексты у нас пока не написаны, они не отображаются.
Запомните! Сolumn – это столбик, а row – это строчка.
Можно даже сказать, что сolumn – это x (абсцисса) координата, а Row – это y (ордината).
Подсчет столбиков и строчек начинается с верхнего левого угла MultiBoard-а.

Чтобы поменять глаз на другую иконку необходимо воспользоваться действием “Меню паузы – Set Item Icon”:
Пример:
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” - путь, указывающий на ее текстуру. С тем же успехом можно поставить и другую текстуру, а лучше щелкнуть кнопку “Выбрать пиктограмму” и выбрать ту иконку, чья текстура нам нужна.
Также можно приписать к иконке текст с помощью действия “Меню паузы – Set Item Text”:
Пример:
Set text for Last created multiboard item in column 2, row 2 to “Надпись”

В результате во 2-ом столбце 2-ой строчки правее от иконки появится текст - “Надпись”.
Может возникнуть другая проблема, текст может не помещаться в отведенное ему пространство до следующей иконки.
Решением этой проблемы станет использование действия Меню Паузы – Set Item Width:
Пример:
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.
Им можно поменять цвет текста.
Пример:
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 число, оно определяет прозрачность текста, у нас стоит 25% прозрачности. Обратите внимание! Не “видимости”, а ”прозрачности”. Сам MultiBoard по умолчанию прозрачный на 25%, если не заметили можете проверить - что рельеф, юниты и т.п. видны сквозь него..., потому лучше ставить и текст прозрачным на 25% чтобы он не сильно но сочетался с MultiBoard’ом... Эту прозрачность установленную по умолчанию можно убрать в "игровом интерфейсе" заменив иконку фона MultiBoard'а.

Также можно поменять название MultiBoard'а при помощи действия Меню паузы – Change Title и поменять его цвет также как в случае с текстом, но только действием Меню паузы – Change Title Color.

Ещё можно скрывать иконки и тексты не удалая их содержимое: Меню паузы - Set Item Display Style
Пример:
Set the display style for Last created multiboard item in column 2, row 2 to Показать text and Скрыть icons.

Получится, что в указанном месте исчезнет иконка. Возможно также скрыть текст (не удалить, а просто сделать его невидимым), а можно и то и другое.

Событие Меню паузы – Destroy, Полностью удаляет MultiBoard.
А событие Меню паузы – Show/Hide просто делает его невидимым, сохраняя все настройки. Потом его можно снова показать, и он останется без изменений.
MultiBoard можно также свернуть в правый верхний угол действием Меню паузы – Minimize/Maximize.
А можно и удалить все его параметры, используя действиеМеню паузы – Clear. Следует учесть, что при применении этого действия число колонок и столбцов приводится к 0.Также их количество можно изменить при помощи действий:
Меню паузы – Change Number Of Rows (Изменяет количество строк);
Меню паузы - Change Number Of Columns (Изменяет количество столбцов).
Обратите внимание, что на их количестве стоят ограничения, но это можно легко обойти, использовав на месте числа, функцию – Arithmetic. И при ее помощи можно задавать сколько угодно колонок и столбцов, например максимум столбцов 16 – а мы хотим 40, и потому делаем 20+20, и все.

Запомните:
Главное в MultiBoard’е - это дизайн. Если всё будет стоять где попало, и все тексты будут написаны одним цветом, то они мысленно сливается друг с другом, и будет сложно понять, на какую именно строчку смотреть:
Это может быть очень плохо, если вы играете в очень активную карту, и время, чтобы посмотреть на MultiBoard всего секунда. Тогда приходится искать глазами, где та или иная информация, которая нужна, а если, например, выделить ее красным, то глаз сразу реагирует на нее, и следить за состоянием информации гораздо проще – в этом суть дизайна.
Также будет полезно знать, что расстояние между строчками изменить НИКАК нельзя, не через триггеры не через джаз, не через что-либо еще...
Пожалуй, по теории это все.

. Если при оформлении MultiBoard’а в одном из его действий в значении столбца/строчки поставить "0", то в этом случае действие произойдет на все столбики/строчки
Пример:
Set the color for Last created multiboard item in column 2, row 0 to (100%, 0%, 0%) with 0% transparency.

В этом случае весь текст, на всех строчках во 2-ом столбике станет красным, тоже правило действует если указать "0" в номере строчки.
Если же указать "0" и в столбике, и в строчке, то в этом случае изменение произойдет со всем multiboard’ом.
2. Вы наверно уже видели Multiboard в карте Dota? Вы наверно обратили внимание, что Multiboard не показывает неиграющих игроков... как же это сделать? очень просто, сначала необходимо создать 2 переменных:
1) Одна обычная, типа целочисленная переменная (integer), назовем ее "player"
2) Одна массив, типа игрок (player), назовем ее "MBplayer"

При событии "Map Initialization" делаем следующее:
Событие
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)))
Иначе - Действия

И что же у нас получилось? Объясняю:
у нас получилось что player стал равным количеству ТОЛЬКО ИГРАЮЩИХ игроков на карте.
А в переменную MBplayer в значение [1] записан первый по номеру играющий игрок, в [2] - второй по номеру, и т.д. но не обязательно, что в [1] записан первый игрок (красный), т.к. его может не быть (он может не играть), а в [1] записан именно первый ИГРАЮЩИЙ игрок, ну и т.д.

И зачем же это все нужно?
А всё очень просто, например, у нас будет Multiboard, показывающий характеристику игроков (ну как в картах жанра AoS). Пусть это будет что-то вроде таблицы (правда Multiboard и есть таблица) заголовки которой будут занимать... скажем... 2-е строчки, а дальше идет перечисление игроков, а потом в самом низу таймер, показывающий время игры...
Общий размер MultiBoard’а у нас получается из:
1. 2 - строки заголовков
2. количество играющих игроков
3. 1 - строчка для таймера
В общей сумме получается так: 3 + player строк.
это мы узнали с каким количеством строк нужно создавать Multiboard, количество столбиков уже зависит от самого вашего Multiboard'a...

Далее, зачем нам понадобилась переменная MBplayer?

Т.к. есть такая функция "Преобразование - Convert Player Index To Player", она может пригодиться для Multiboard’а, а именно в использовании цикла на распределение очков убийств. Хотя эта функция определяет игрока по его номеру, такое в данном случае не выйдет, потому что у нас совершено иной набор игроков и потому вместо этой функции мы будем использовать переменную MBplayer, которая содержит тот набор, который нам нужен.
Все циклы используем от 1 до player, потому что больше не требуется. Ведь у нас все равно игроков не больше player’а.
Примечание: Если вы еще будете где-то использовать какие-либо циклы с действиями над всеми игроками, используйте его также от 1 до player’а, т.к., опять повторю - "больше не требуется".
Остался таймер... советую посмотреть эту тему, там вы поймете, как делать таймер. Но т.к. строка таймера у нас всегда разная, то она будет всегда равна 3+player. Вот вроде бы и примерное объяснение такого Multiboard’а...
3. Как сделать для каждого игрока MultiBoard отдельно?
Очень распространённый вопрос, но сделать это легко... Однако только через jass...
Для начала нам понадобится переменная-массив типа multiboard, и назовем ее "MB".
Нужно при инициализации использовать код:
local integer i = 1
call TriggerSleepAction( 0.01 )
loop
exitwhen i > 12 //12 - это количество всех игроков, но как уже говорилось выше (во 2-ом пункте), лучше здесь указать не 12, а переменную udg_player.
set udg_MB = CreateMultiboardBJ( ROWS, COLUMNS, "TITLE" )
call MultiboardDisplayBJ( false, udg_MB )
set i = i + 1
endloop
//верхний цикл, создавал 12 совершено разных MultiBoard’ов, и записал их в переменную массив MB по порядку
set i = 1
loop
exitwhen i > 12
if ConvertedPlayer(i) == GetLocalPlayer() then //ConvertedPlayer(i), это то о чем говорилось во 2-ом пункте, но если вы хотите делать также как и там, то тут вместо этого следует указать переменную udg_MBplayer[i].
call MultiboardDisplayBJ( true, udg_MB )
endif
set i = i + 1
endloop
[I]//этот массив показал для первого игрока MultiBoard который находится в переменой MB[1], для второго - MB[2], и т.д.

Данный код создаст 12 MultiBoard’ов, каждый из которых будет помещен в переменную MB, от 1 до 12 ячеек. Мультиборд из первой ячейки будет показан 1-ому игроку, MultiBoard из 2-ой ячейки будет показан 2-ому и т.д.
Если же мы хотим изменить multiboard у 4-ого игрока, надо изменять MB[4], если же хотим изменить multiboard у всех игроков, то надо будет изменить каждую ячейку переменой MB. Лучше конечно использовать цикл...
Примечание: Вообще-то было бы лучше, если будет использован пункт 2 из данной части статьи, и при последующем создании multiboard’а он будет создаваться циклом не для всех игроков (играющих и не играющих), а для только играющих, через цикл от 1 до player, потому что нет смысла показывать multiboard игрокам, которые не играют.
Ну вот и все...

Действия я подробно расписывать не буду, т.к. если вы внимательно хотя бы 2 раза прочитали “теорию” у вас не должно возникнуть с этих проблем, и вы должны постараться справиться сами, т.к. практика учит быстрее теории.
В конце статьи прикреплен файл, с уже сделанным MultiBoard’ом, о котором будет идти речь. Вы можете просмотреть его, НО!! Суть практики не в том, чтобы смотреть уже сделанную работу, а в том, чтобы самим ее сделать. Настоятельно рекомендуется сначала попробовать самим, хоть даже если это и покажется сложным.

Рассмотрим создание multiboard’a, который будет отображать, жив юнит или мертв, и если он мертв, то будет показано, через какое время он воскреситься.
Сначала попробуйте сделать MultiBoard сами, прочитав только его описание и руководствуясь этой картинкой (на ней изображено что должно получится).
если вы сможете его сделать, то читать практику необязательно, но можете скачать прикрепленный файл для сравнения.

Если не получилось - прочитайте инструкцию. Смысл инструкции в том, что она не указывает, какие действия надо ставить, а только говорит, каков эффект будет от данного действия. Вы прочитали теорию, и должны знать, какое действие поставить. Если все равно не получается - смотрите пример.
Состояние юнита
Создадим простейший MultiBoard

Инструкция
Для начала создадим карту, удалим все действия из триггера “Initialization”, и первое, что поставим - это “Wait 0.1”. После этого создаём MultiBoard c 2-я столбцами и 3-я строчками, назовем этот MultiBoard “Состояние юнита”.
Далее можно пользоваться циклами, но так как предполагается, что читатель – новичок, будем делать без циклов - просто по порядку.

(Чтобы было меньше писать столбики и строчки будем обозначать так: x-y, где X- столбцы, Y – строчки.)
Далее делаем, чтобы в позициях 1-1, 1-2, 1-3, 2-1, 2-2, 2-3, скрывалась иконка, но показывался текст.
Далее:
Действия:
-на позицию 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%)

Первый триггер у нас готов!
Далее поставим 2-х юнитов на карту рядом друг с другом (Артеса и Иллидана).
Создаем переменную-массив integer (целочисленная) OTC4ET.

Создаём следующий триггер:
Событие
Generic Unit Event, Юнит умирает.
В действиях: Создаем 2 действия – If / Then / Else, Multiple Functions.
В первом ставим, что:
Если: Умерший юнит = Артес
То:
Set OTC4ET (1) = 30
//Далее без циклов тут не обойтись потому создаем цикл
For each (integer 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).

Теперь запустите карту, и убейте любого юнита другим юнитом и посмотрите на Multiboardd. Всё отлично!
Надеюсь, вы поняли, как делать MultiBoard, ниже я выложил его пример.
Примечание: Действие - Wait, очень плохо работает, и если зделать через него промежуток в 30 сек, то он будет ждать не 30 сек, а совсем другое время но примерно равное 30, также лучше вместо него использовать таймер..

Категория: Статьи о картостроении | Добавил: Admin (27.12.2009)
Просмотров: 1012 | Теги: Мультиборд | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Друзья сайта
Вот



Антибаннер
Описание:
Adguard удаляет рекламный спам, ускоряет загрузку страниц и экономит трафик.

Последние файлы

29.03.2020

Скачать (3.87 Mb)

01.09.2017

Скачать ()

01.09.2017

Скачать ()

02.07.2017

Скачать (8 МБ)

03.12.2014

Скачать (546 MB)

22.11.2014

Скачать ()

19.09.2014

Скачать (137 mb)

17.09.2014

Скачать (100 mb)

17.09.2014

Скачать (133 mb)

31.07.2013

Скачать (7мб)



Wc3maps © 2024