| Добавил: root 2013-01-09 13:27:55 278 просмотров В данной статье мы расскажем о создании табло с подсчетом фрагов. Такое табло Вы могли видеть на карте Ka_100x100. При каждом убийстве игрока счетчик увеличивается на единицу. Счетчик имеет 3 разряда: единицы, десятки, сотни, т.е. максимальное количество фрагов составляет 999, затем происходит обнуление.
Мы будем очень активно использовать следующие энтити-объекты:
Приготовьтесь к созданию 94 объектов и выставлению их свойств :) Ничего страшного нет, вся система построена как бы из повторяющихся звеньев. Каждое звено состоит из 3-4 объектов, свойства которых очень схожи.
Итак, давайте посмотрим, как будет выглядеть табло:
Нолики и другие цифры, которые будут появляться при каждом фраге, не просто картинки, это объекты func_button с нанесенными на них цифрами. Когда убьют какого-либо игрока, кнопка с цифрой «0» поднимется вверх, а сверху опустится кнопка с цифрой «1». При следующем фраге кнопка с цифрой «1» поднимется вверх, а сверху опустится кнопка с цифрой «2» и т.д.
Средняя цифра меняется только при каждом десятом фраге. Левая цифра (разряд сотен) меняется только при каждом сотом фраге.
Изначально кнопку с цифрой «0» необходимо разместить так, чтобы ее было видно на табло. Остальные кнопки с цифрами от 1 до 9 нужно разместить над кнопкой 0 так, чтоб они были скрыты в «конструкции табло». Всего необходимо создать 30 кнопок (по 10 на разряды единиц, десятков и сотен). Из этих 30 кнопок сразу будут видны только 3 — это изначальные нули, остальные 27 будут скрыты в табло.
Кстати, мы рекомендуем конструкцию табло (т.е. все, что окружает кнопки) превратить в func_wall, чтобы при компиляции свет мог проникнуть через конструкцию (как известно, энтити-объекты пропускают свет) и осветил текстуры цифр (иначе текстуры получатся затемненными).
О подсчете фрагов
Теперь расскажем о том, как будут подсчитываться фраги.
У нас есть замечательный энтити-объект game_counter, который считает свои активации и по достижении определенного значения активирует другой объект.
Мы создадим 3 таких объекта:
- Первый будет считать отдельные фраги (он будет переключать кнопки единиц)
- Второй будет считать до 10 фрагов (он будет переключать кнопки десятков)
- Третий будет считать до 100 фрагов (он будет переключать кнопки сотен)
Нам нужно, чтобы при каждом фраге все 3 счетчика увеличивали свое значение на 1. Для этого воспользуемся объектом multi_manager, в который запишем активацию всех 3-х счетчиков. Имя для multi_manager'а нужно выставить как game_playerkill. Это одно из пяти специальных имен, которое позволяет активировать объект при убийстве игрока. Таким образом, теперь при каждом фраге у нас будет автоматически активироваться multi_manager, который в свою очередь активирует 3 счетчика.
Multi_manager (этот объект активируется при каждом фраге) |
Name: game_playerkill (имя должно быть именно таким!) 1counter — 0 (активация счетчика единиц по имени 1counter через 0 секунд) 10counter — 0 (активация счетчика десятков по имени 10counter через 0 секунд) 100counter — 0 (активация счетчика сотен по имени 100counter через 0 секунд) |
|
Счетчики game_counter с именами: 1counter, 10counter, 100counter активируют кнопки с цифрами. Например, кто-то набрал 1 фраг. Срабатывает multi_manager. Тут же все три счетчика увеличивают свое значение на 1. Самый первый счетчик ведет отсчет отдельных фрагов, а значит он должен при каждой активации переключать кнопки единиц.
Нам необходимо сделать так, чтобы активировав первую кнопку, в следующий раз счетчик активировал бы вторую кнопку, затем третью и т.д., то есть необходимо, чтобы параметр «Target» счетчика менялся по кругу от 0 до 9 кнопки. Это можно организовать при помощи объекта trigger_changetarget.
Ниже приведена схема работы одного из счетчиков.
Предположим, что кто-то набрал фраг. В этом случае возникает следующая цепочка действий:
- Счетчик game_counter увеличивает свое значение на 1
- Затем он активирует первый multi_manager (на схеме левая красная стрелка)
- Multi_manager поднимает кнопку «0»
- Multi_manager опускает кнопку «1» туда, где только что была кнопка «0»
- Multi_manager запускает первый объект trigger_changetarget (на схеме CT1)
- Trigger_changetarget перенаправляет счетчик с первого multi_manager'а на второй
Дальше действия развиваются по второй красной стрелке на схеме (все действия аналогичные).
- Счетчик game_counter увеличивает свое значение на 1
- Активирует второй multi_manager (вторая красная стрелка)
- Multi_manager поднимает кнопку «1»
- Multi_manager опускает кнопку «2» туда, где только что была кнопка «1»
- Multi_manager запускает второй объект trigger_changetarget (на схеме CT2)
- Trigger_changetarget перенаправляет счетчик со второго multi_manager'а на третий
Тоже самое происходит при смене кнопки «2» на кнопку «3» и т.д. до кнопки «9». Таким образом, для разряда единиц необходимо создать 10 подобных звеньев из multi_manager'а, двух кнопок и trigger_changetarget (всего: 30 объектов).
Для раздела десятков все тоже самое (нужно создать еще 30 объектов, считая кнопки десятков), единственная разница в свойствах счетчика — он активирует кнопки через каждые 10 фрагов, а не через каждый фраг. Для сотен — еще 30 объектов. А счетчик сотен активирует кнопки через каждые сто фрагов, т.е. довольно редко.
Рекомендуем размещать счетчики единиц, десятков и сотен рядом с соответствующими мульти_менеджерами и прочими объектами (чтобы не запутаться). Вы можете посмотреть, как это сделано на нашей тестовой карте.
Свойства объектов для счетчика единиц
Ниже мы приводим свойства самого первого звена объектов (на схеме к этому звену ведет левая красная стрелка).
Game_counter (счетчик единиц) |
Name: 1counter (имя счетчика единиц) Target: m0 (сюда необходимо записать имя самого первого объекта multi_manager, см. схему выше) Initial Value: 0 (начальное значение счетчика — 0) Limit Value: 1 (конечное значение, достигнув которого, счетчик начнет активировать кнопки; т.к. это счетчик единиц, то необходимо поставить значение 1)
Флаги:
Reset on fire: нужно отметить этот флаг, чтобы счетчик сбрасывался на 0 (обнулялся), когда достигаеся значение «Limit Value» |
|
Multi_manager (этот объект опускает/поднимает кнопки, активирует другие объекты) |
Name: m0 (имя данного объекта) btn0 — 0 (поднимает кнопку «0») btn1 — 0 (опускает кнопку «1») ct0 — 0 (запускает объект trigger_changetarget) |
|
Func_button (кнопка «0», разряд единиц) |
Name: btn0 (имя кнопки «0» из разряда единиц) Angle: Up (направление движения вверх) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации |
|
Func_button (кнопка «1», разряд единиц) |
Name: btn1 (имя кнопки «1» из разряда единиц) Angle: Down (направление движения вниз, т.к. изначально кнопка расположена выше табло) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации |
|
Trigger_changetarget (меняет параметр «Target» счетчику единиц) |
Name: ct0 (имя данного объекта) Target: 1counter (здесь указывается имя счетчика единиц) New Target: m1 (означает, что в следующий раз счетчик будет активировать объект по имени m1, т.е. следующий мульти_менеджер из второго звена) |
|
Это первое звено объектов, которые меняют цифру 0 на цифру 1. Как Вы понимаете, необходимо сделать еще 9 таких звеньев.
Свойства объектов для счетчика десятков
Ниже мы приводим свойства первого звена объектов для счетчика десятков.
Game_counter (счетчик десятков) |
Name: 10counter (имя счетчика десятков) Target: m00 (сюда необходимо записать имя самого первого объекта multi_manager в звене десятков) Initial Value: 0 (начальное значение счетчика — 0) Limit Value: 10 (конечное значение, достигнув которого, счетчик начнет активировать кнопки; т.к. это счетчик десятков, то необходимо поставить значение 10)
Флаги:
Reset on fire: нужно отметить этот флаг, чтобы счетчик сбрасывался на 0 (обнулялся), когда достигаеся значение «Limit Value» |
|
Multi_manager (этот объект опускает/поднимает кнопки, активирует другие объекты) |
Name: m00 (имя данного объекта) btn00 — 0 (поднимает кнопку «0» в разряде десятков) btn11 — 0 (опускает кнопку «1» в разряде десятков) ct00 — 0 (запускает объект trigger_changetarget) |
|
Func_button (кнопка «0», разряд десятков) |
Name: btn00 (имя кнопки «0» из разряда десятков) Angle: Up (направление движения вверх) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации |
|
Func_button (кнопка «1», разряд десятков) |
Name: btn11 (имя кнопки «1» из разряда десятков) Angle: Down (направление движения вниз, т.к. изначально кнопка расположена выше табло) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации |
|
Trigger_changetarget (меняет параметр «Target» счетчику десятков) |
Name: ct00 (имя данного объекта) Target: 10counter (здесь указывается имя счетчика десятков) New Target: m11 (означает, что в следующий раз счетчик будет активировать объект по имени m11, т.е. следующий мульти_менеджер из второго звена) |
|
Это первое звено объектов, которые меняют цифру 0 на цифру 1 в разряде десятков. Дальше необходимо создать еще 9 таких звеньев.
Свойства объектов для счетчика сотен
Ниже мы приводим свойства первого звена объектов для счетчика сотен.
Game_counter (счетчик сотен) |
Name: 100counter (имя счетчика сотен) Target: m000 (сюда необходимо записать имя самого первого объекта multi_manager в звене сотен) Initial Value: 0 (начальное значение счетчика — 0) Limit Value: 100 (конечное значение, достигнув которого, счетчик начнет активировать кнопки; т.к. это счетчик сотен, то необходимо поставить значение 100)
Флаги:
Reset on fire: нужно отметить этот флаг, чтобы счетчик сбрасывался на 0 (обнулялся), когда достигаеся значение «Limit Value» |
|
Multi_manager (этот объект опускает/поднимает кнопки, активирует другие объекты) |
Name: m000 (имя данного объекта) btn000 — 0 (поднимает кнопку «0» в разряде сотен) btn111 — 0 (опускает кнопку «1» в разряде сотен) ct000 — 0 (запускает объект trigger_changetarget) |
|
Func_button (кнопка «0», разряд сотен) |
Name: btn000 (имя кнопки «0» из разряда сотен) Angle: Up (направление движения вверх) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации |
|
Func_button (кнопка «1», разряд сотен) |
Name: btn111 (имя кнопки «1» из разряда сотен) Angle: Down (направление движения вниз, т.к. изначально кнопка расположена выше табло) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации |
|
Trigger_changetarget (меняет параметр «Target» счетчику сотен) |
Name: ct000 (имя данного объекта) Target: 100counter (здесь указывается имя счетчика сотен) New Target: m111 (означает, что в следующий раз счетчик будет активировать объект по имени m111, т.е. следующий мульти_менеджер из второго звена) |
|
Это первое звено объектов, которые меняют цифру 0 на цифру 1 в разряде сотен. Дальше необходимо создать еще 9 таких звеньев.
Вот и все нехитрое устройство счетчика фрагов :) Думается, немногие мапперы дочитают эту статью до конца, но поверьте, придумать такое, да еще и понятно описать оч-ч-чень трудно. В любом случае Вы можете скачать нашу карту-пример и скопировать счетчик на свою карту. Используйте на здоровье!
frag-o-matic.zip [93Кб] — в архиве карта-пример в форматах BSP и RMF.
Тэги: | |