Коллизия между одинаковыми объектами и изменение переменной

техническая поддержка по Construct 2

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 09 июл 2018, 14:51

Приветствую.

Имеется три инстанса одного объекта (sprite).
У объекта есть локальная переменная (var).
Var может принимать значение 0, 1, 2.
Sprite(0) - первый инстанс объекта спрайт имеет var=0.
Sprite(1) - var=1.
Sprite(2) - var=2.

Необходимо, чтобы при коллизии спрайтов, проверялось:
Что с любым из спрайтов соприкоснулся спрайт у которого var=2.
Что после предыдущего события (отследили, что один из соприкоснувшихся спрайтов имеет вар=2), тот спрайт с которым соприкоснулся имеющий значение вар=2, имеет вар=0. Если имеет (тот которого тронули), то сделать вар=1.
Пока не могу никак это реализовать. Вычитал про селф и озер, но пока никак не могу понять, как это дело применять (в рамках задания условия, а не действия).

Объяснение на пальцах (для тех кому тяжело в абстракцию изложенную выше).
Есть зомби. У зомби три состояния 0 - спокойный, 1 - встревоженный, 2 - агрессивный.
Если агрессивный зомби сталкивается со спокойным, спокойный зомби становится встревоженным.

//UPD
Добавлю, что количество инстансов не определено и постоянно меняется. Так что брать инстансы UID или IID для меня неприемлемо. Нужно более универсальное решение.
Аватара пользователя

Участник
Сообщений: 24
Я тут с 16 ноя 2012
Репутация 0 [ ? ]

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 09 июл 2018, 19:46

Проверить столкновение двух копий одного объекта можно только с использованием семьи (family). Т.е. создаешь семью и добавляешь туда спрайт. А уже в ивентах проверяешь коллизию спрайта с семьей. И кстати, переменную свою добавь именно к семье, а не к спрайту.
Аватара пользователя

Игродел
Сообщений: 1176
Я тут с 06 июл 2015
Репутация 295 [ ? ]

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 12 июл 2018, 22:09

Bishop, чет не могу никак сообразить, как этот способ правильно реализовать.
И так и эдак пробовал, а результат никакой.

 
Изображение

Все 4 способа не фурычат должным образом.
Аватара пользователя

Участник
Сообщений: 24
Я тут с 16 ноя 2012
Репутация 0 [ ? ]

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 12 июл 2018, 22:18

Rikushi, Я думаю нужно проверять столкновение семьи с самой семьёй, а не с объектами из внутренностей этой семьи
Изображение
Аватара пользователя

Игродел
Сообщений: 1953
Я тут с 26 сен 2013
Откуда: Екб
Двиг: C2
VK: indiewolf_games
Репутация 224 [ ? ]

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 12 июл 2018, 23:00

AferisT, в чем же тогда будет отличие от столкновения объекта с объектом? Ситуация изложенная в первом посте.
Аватара пользователя

Участник
Сообщений: 24
Я тут с 16 ноя 2012
Репутация 0 [ ? ]

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 12 июл 2018, 23:27

Rikushi, Я не силён в логическом объяснении программной обработки... Суть в том, что копии спрайта находящиеся в семье и при определении столкновений для объекта семьи с другим объектом семьи всё работает правильно, а при просто столкновении копии спрайта с копией программно это выглядит как столкновении спрайта с самим собой...
Ты попробуй через семью столкновение с с этой же семьёй
Изображение
Аватара пользователя

Игродел
Сообщений: 1953
Я тут с 26 сен 2013
Откуда: Екб
Двиг: C2
VK: indiewolf_games
Репутация 224 [ ? ]

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 13 июл 2018, 05:34

AferisT, попробовал. Результат был ожидаем, все не работает как и в предыдущих случаях.
Аватара пользователя

Участник
Сообщений: 24
Я тут с 16 ноя 2012
Репутация 0 [ ? ]

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 13 июл 2018, 11:50

Накидал такой вариант. Оно?

collisions.capx
(175.17 КБ) Скачиваний: 10
проверка коллизий копий одного спрайта с разными переменными


Спрайты мышью таскать надо, если что.
UPD: убрал семью, без нее тоже работает.
Возможно могут быть проблемы при одновременной обработке большого числа столкновений.
Аватара пользователя

Участник
Сообщений: 114
Я тут с 22 сен 2016
Откуда: Ярославль
Двиг: Construct2
Лицензия: Personal
VK: first_indiegames
Репутация 14 [ ? ]

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 13 июл 2018, 12:44

robert76, Да, способ тот, что мне нужен. Благодарности.
Немного переделал под свой случай.
collisions.capx
(175.81 КБ) Скачиваний: 9
Аватара пользователя

Участник
Сообщений: 24
Я тут с 16 ноя 2012
Репутация 0 [ ? ]

Сообщение Коллизия между одинаковыми объектами и изменение переменной
» 13 июл 2018, 19:53

Чем дальше в лес, тем толще партизаны.

Можно ли как-то проверить, что объекты семьи находятся в LOS (Line Of Sign) у другого объекта этой же семьи?
Стандартный способ: <base> has los to <base> -> blah blah
Результата никакого не дает.

//UPD
Даже попытка применения костыльного варианта не дает эффекта. Что очень странно.
 
Изображение


//UPD 2
При этом в на "тестовом стенде" все работает прекрасно. Ладно, буду разбираться.

//UPD 3
Вощм я в полном смятении.
 
Изображение

На живом проекте работает только последний вариант, с прямым указанием объектов.
С семейством же вообще лос работать не желает.
При этом тут, все работает:
LOS.capx
(172.18 КБ) Скачиваний: 9


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

//UPD 4
Такс, причину выяснил.
 
Изображение

Всему виной предыдущее условие, которое сравнивает значение переменной.
В том виде, в котором это реализовано у меня, получается что берем базу с указанным значением и смотрим лос баз с таким же значением. Совершенно не то, что мне нужно. А сделать как нужно, чет не получается.

Условие должно быть следующим:
Если база, которая имеет значение "Explose" имеет лос с любой базой, не зависимо от ее значения. То применить действие к тем базам, которые в лосе у имеющей "Explose".
Как его сделать?

//UPD 5
Все, вопрос снят. Разобрался.
Аватара пользователя

Участник
Сообщений: 24
Я тут с 16 ноя 2012
Репутация 0 [ ? ]



Вернуться в Вопрос-Ответ по Construct 2

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх