Иерархия Family

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

Сообщение Иерархия Family
» 29 окт 2018, 13:53

Как лучше всего для двух разных семейств выделить общее свойство ?

1. Есть семья Monster объекты которой при уничтожении (событие destroy) должны давать игроку очки.
2. Есть семья Bonus объекты которой при соприкосновении с игроком (событие overlapping) также должна давать очки.

Идеальным было бы создать общего родителя Score у которого будет свойство очки и методы для работы с ними: добавить очки игроку, временное отобразить очки над объектом ...
Изображение
Но такой возможности нет :(
Пробовал просто запихнуть объекты обоих семейств в новую Score, в надежде на такую реализацию:

Изображение

Но тут обработчик не знает что текущий Bonus == Score, и для Score просто берётся первый объект семейства.
Аватара пользователя

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

Сообщение Иерархия Family
» 29 окт 2018, 18:16

unname, объединять семьи в другие семьи не получится (по крайней мере в С2 без сторонних плагинов и коддинга).
Аватара пользователя

Модератор
Сообщений: 4583
Я тут с 18 сен 2015
Откуда: Екатеринбург
Двиг: С2/С3
Лицензия: Personal
VK: id21590703
Репутация 668 [ ? ]

Сообщение Иерархия Family
» 29 окт 2018, 21:16

Хорошо, может есть какие-то best practice на этот случай ? Кажется проблемы такого плана должны часто возникать.
Последний раз редактировалось unname 30 окт 2018, 12:27, всего редактировалось 2 раз(а).
Аватара пользователя

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

Сообщение Иерархия Family
» 30 окт 2018, 00:38

Иерархии нет. Надо всю логику проводить через общую семью. Добавить переменную tipe и вписывать в неё к какому типу объект относится и при событиях уничтожения или перекрытия проверять их тип. Если сравнение двух семей неизбежно, надо соблюдать правила выбора объектов.
Аватара пользователя

Игродел
Сообщений: 1285
Я тут с 31 май 2017
Репутация 247 [ ? ]

Сообщение Иерархия Family
» 30 окт 2018, 01:20

repkino, спасибо! Я тоже, подумав, в итоге пришёл к такому workaround'у, добавил к Score текстовое поле в котором для каждого объекта сам прописываю кто это. Так что это неплохо работает (пока мне не требуется использовать какие-либо свойства этих семейств) Но вообще мне как С++ программисту грустно, что нельзя многоуровневое наследование делать :)

А если использовать такой вариант, добавить в conditions дополнительное условие для объекта свойство которого требуется использовать (тут это overlapping Score) ?

Изображение

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

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

Сообщение Иерархия Family
» 01 ноя 2018, 17:14

unname, зачем вам Overlapping?
Даже если объект находится в разных семействах, то у него все равно один UID.
Можно просто сделать Pick by UID в условии и тогда будет выбран нужный объект
 Дополнительные контакты
Telegram: @DeXVinogradov
Skype: DeXVinogradov
Mail: dexvinogradov@[mail.ru, gmail.com, ya.ru]
Аватара пользователя
DeX

Игродел
Сообщений: 2488
Я тут с 13 дек 2014
Откуда: Москва
Репутация 520 [ ? ]

Сообщение Иерархия Family
» 02 ноя 2018, 01:20

DeX, тут речь не про конкретный объект, а про все объекты семьи, допустим у меня на уровне их сотня: монетки, вишенки, и прочие Bonus'ы, не перечислять же их все по UID. А Overlapping опять же взял из практики, нужно получать очки при подборе объекта (уничтожать я его пока не хочу, пусть посветится анимацией ещё несколько секунд).
Аватара пользователя

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

Сообщение Иерархия Family
» 05 ноя 2018, 16:31

unname, так и не надо перечислять все UID.
Если я вас правильно понял, то у вас спрайт находится в двух семействах bonus и score.

При коллизии с bonus делаете для score -> pick by UID -> bonus.UID и работаете с одним и тем же объектом.
При этом не надо будет дважды проверять коллизии и будет меньше нагрузка.
 Дополнительные контакты
Telegram: @DeXVinogradov
Skype: DeXVinogradov
Mail: dexvinogradov@[mail.ru, gmail.com, ya.ru]
Аватара пользователя
DeX

Игродел
Сообщений: 2488
Я тут с 13 дек 2014
Откуда: Москва
Репутация 520 [ ? ]

Сообщение Иерархия Family
» 06 ноя 2018, 16:21

DeX, всё теперь понял! Действительно, очень хороший способ, нету нагрузки из-за дублирования условий, а ещё можно использовать со "Срабатывающими условиями", которые вообще не дублируются.

Большое спасибо за идею!
Аватара пользователя

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



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

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

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

Наверх