GamesQuest

Как работает Spread Value

Set posicion of tank

В этой статье Я подробно объясню, как именно работает Spread Value (распределение значений), и как вы можете его использовать.

Информация для новичков

Все Активные объекты в MMF2 и  CLF2.5, имеют Alterable Values (Альтернативные Значения или Переменные). Если вы создаете один объект монстра, и размещаете несколько его копий, эти Alterable Values позволят вам сделать каждую копию уникальной.

Классическим примером является счетчик урона. Например вы делаете события:

● Столкновение Игрока с Врагом
+ И у Игрока выполняется анимация атаки
— Добавить «5 » в значение А Врага

В Clickteam Fusion 2.5, вы можете  переименовать значение, и назвать переменную по собственному желанию. Например вы можете дать имя «Повреждения» (в Clickteam Fusion 2.5 можно давать имя на русском языке) вместо «Alterable Value A». Что бы это сделать выберете объект, в его свойствах перейдите на вкладку «Values» и в Alterable Values нажмите кнопку «New».

Далее мы могли бы сделать:

● Враг «Повреждения» больше 20
— Уничтожить врага

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

Spread Value позволяет применять эту концепцию еще дальше.

Основная идея Распространения значений

«Spread Value» принимает значение и использует его в качестве ID для всех копий объекта. Таким образом, в случае нашего врага, предположим, что мы делаем следующее:

● Начала кадра
— Распространить «1» в Alterable Value А Врага

Теперь Alterable Value А для каждого из наших вражеских объектов выглядит так:

Копии врага  Значение А
1-ый враг 1
2-ой враг 2
3-ий враг 3
4-ый враг 4

и так далее…

Изменяемое значение выступает в качестве идентификационного номера — так что, если есть 5 врагов, каждый из них будет иметь идентификационный номер от 1 до 5.

Так же мы можем переименовать Alterable Values и дать ему имя «ID», чтобы с первого взгляда было понятно для чего мы используем это значение.

Мы могли бы использовать любое из  Alterable Values в качестве Spread Value, и, как вы увидите позже, есть некоторые ситуации, в которых вы могли бы использовать несколько таких переменных в одно и то же время!

Примечание о Spread Value

Когда вы устанавливаете Spread Value, чтобы дать копиям объекта идентификационный номер, вы назначаете начальный номер — «1». Это означает, что враги будут пронумерованы 1, 2, 3, 4, и т.д. Если вы устанавливаете «0», то враги будут пронумерованы 0, 1, 2, 3 и так далее. Если вы наберете «5», они будут пронумерованы 5, 6, 7, 8.

Конечно, обычно используется либо «1» или «0».

Spread Value и выбор объектов

Вы помните, в нашем первом примере «для новичков» было следующее условие:

● Враг «Повреждения» больше 20
— Уничтожить врага

… где только враги, чьи повреждения превышают 20 были уничтожены?

Это потому, что CLF2.5 имеет своего рода систему «выбора объектов» в ее событиях. Только объекты, удовлетворяющие условиям будут зависеть от действий, которые вы выберете.

Это также верно для действия Spread Value.

Когда мы сделали:

● Начала кадра
— Распространить «1» в Alterable Value А Врага

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

Но предположим, что мы нарисовали линию на пол-экрана (в положении, скажем, 320px). Теперь мы имеем несколько врагов слева и несколько справа. И мы делаем следующее:

● Позиция координаты X Врага  больше «320»
— Распределить «1» по переменной ID Врага

Результатом является то, что все враги слева будут иметь ID в значении 0, но те, на правой стороне будут иметь идентификационные номера — 1, 2, 3, 4, 5 и т.д.

Теперь значение распределяется только на объекты удовлетворяющие условию.

Соединение объектов

Итак, давайте посмотрим, что мы можем реально сделать с этой вещью.

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

Вы создаете 5 копий танков и 5 копий башен танка, и вы делаете это:

● Всегда
— Задать положение башни танка от объекта танка

Это действие устанавливает положение каждой башни на каждый танк.

Теперь если мы дадим идентификационные номера для танков и башен:

● Начало кадра
— Распределить «1» по ID танка
— Распределить «1» по ID башни танка

… то мы заметим, что идентификационные  номера танков автоматически совпадают номерами их башен!

Так башня №3 будет совпадать с танком №3, а башня №2 будет совпадать с танком №2.
Теперь предположим, что мы хотим сделать так, чтобы, когда пуля попадает в башню танка, то повреждения получал танк связанный с этой башней:

● Пуля сталкивается с башней танка
+ ID танка = ID башне танка
— Добавить 5 к повреждению танка
— Уничтожить Пуля


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

Таким образом, мы связываем объекты вместе, используя свойство одинакового ID.

В действиях, только танк с тем же ID, что и у башни, которая столкнулась с пулей будет поврежден! И только пуля, которая попала в башню будет уничтожена.

Детектор

Другой распространенный пример это использование объектов «Детектор». Предположим, мы хотим что бы персонаж обнаруживал боеприпасы и поворачивался в их сторону когда они рядом. Создайте большой сплошной круг в качестве активного объекта (мы назовем его Detector).

Мы даем ему Spread Value:

● Начало кадра
— Распределить «1» по ID Персонажа
— Распределить «1» по ID Детектора

… и мы соединяем детекторы с персонажами:

● Всегда
— Задать положение «детектор» от координат «персонажа»

Теперь мы можем сделать это:

● Детектор сталкивается с боеприпасами
+ ID персонажа = ID детектора
— Персонаж смотрит на боеприпасы

Примечание: Действие Look at from… работает только в случае заполненной анимации направлений у объекта.

Итак, только детектор, который сталкивается с боеприпасами будет отобран, и только Боеприпасы, которые сталкиваются с детектор будут выбраны.
Во втором событии — только персонаж с тем же идентификатором, что и детектор будет выбран.

Таким образом, результатом является то, что только персонаж, чей ID является таким же, как у детектора, который перекрывает патроны будет задействован. И он будет смотреть только на боеприпасы столкнувшиеся с детектором.


Эта концепция использования Spread Values является фундаментальным ключом к управлению копиями одного объекта или к соединению нескольких объектов в один.

Циклы! Добавление объектов во время игры

Использование события «Start of Frame» (начала кадра) лучше всего подходит для распределения идентификационных номеров, но только если вы не планируете создавать новых врагов во время игры.

Если же у вас есть, например, точки появления врагов или что-то типа этого, то есть два простых способа пронумеровать новых врагов.

ВАРИАНТ 1

● Всегда
— Распределить «1» по ID Врага

Обновление идентификационных номеров для каждого объекта происходит все время. Но это немного расточительно.

ВАРИАНТ 2

● Начало кадра
— Запустить цикл «IDS» 1 раз.

● Враг ID = «0»
— Запустить цикл «IDS» 1 раз.

● В цикле «IDS»
— Распределить «1» по ID Врага

Это более эффективно. Мы используем fastloop, как функцию. Нам нужно только запустить одну петлю в нужный момент и пронумеровать все объекты, независимо от их количества.

Мы запустили цикл в начале, так что все объекты распространились в начале.

Но, то что мы распространяем значение «1», означает, что объекты со значением «0» — это только что созданные объекты.

Так что, если попадается объект Врага со значением «0», то мы запускаем цикл.

Еще пример с Fastloops и Spread Value

Допустим, что вы делаете игру где нужно управлять армией и вы пронумеровали не всех, а только часть солдатиков для каких-то определенных действий. И что бы управлять пронумерованной частью солдатиков вы сначала запускаете цикл по этим объектам.

 

А затем сравниваете индекс цикла с идентификатором солдатика:

● В цикле «МойЦикл»
+ ID солдатика = индекс солдатика в цикле
— Сделайте необходимые действия

Таким образом мы выбираем из всех объектов в цикле только те которые имеют идентификатор и выполняем действия для каждого из них.

Примечание: В такой ситуации нужно начинать распределение значений с «0», поскольку цикл начинаются с нуля.

Конечно, в данном примере мы могли использовать конструкцию попроще, как например:

● Если ID солдатика > 0
— Сделайте необходимые действия

Но Я уверен, что эта техника пригодится вам когда простого сравнения значений будет недостаточно.

На этом всё! Я надеюсь, что информация о Spread Value была вам полезна.

В этой статье Я подробно объясню, как именно работает Spread Value (распределение значений), и как вы можете его использовать. Информация для новичков Все Активные объекты в MMF2 и  CLF2.5, имеют Alterable Values (Альтернативные Значения или Переменные). Если вы создаете один объект монстра, и размещаете несколько его копий, эти Alterable Values позволят вам сделать каждую копию уникальной. Классическим примером является счетчик урона. Например вы делаете события: ● Столкновение Игрока с Врагом + И у Игрока выполняется анимация атаки --- Добавить "5 " в значение А Врага В Clickteam Fusion 2.5, вы можете  переименовать значение, и назвать переменную по собственному желанию. Например вы можете дать имя "Повреждения" (в Clickteam Fusion…
Как работает Spread Value
Как работает Spread Value
2014-09-07
90

9

Рейтинг: 5 ( 1 голосов)