|
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22
|
|
Какой паттерн использовать?26.09.2017, 12:11. Показов 4972. Ответов 11
Метки нет (Все метки)
Какой паттерн использовать (и использовать ли) в такой ситуации:
Существует множество разноклассовых объектов на тачскрин-экране, могущих отреагировать на касание. Должен отреагировать один, ближайший. Я использовал такую схему: Один объект-посредник реагирует на касание, и отсылает сообщение с координатами всем подписчикам (разноклассовым объектам, подписавшимся на него). Подписчики отвечают ему своей дистанцией до точки касания, он выбирает минимальную и повторно шлет сообщение (другого типа) подписчикам. Тот, чья дистанция совпадает - реагирует на касание. Реализовано на event-ах c#. Можно ли это сделать более изящно?
0
|
|
| 26.09.2017, 12:11 | |
|
Ответы с готовыми решениями:
11
Какой паттерн использовать в такой ситуации? Какой структурный паттерн выбрать? На какой паттерн заменить switch? |
|
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,293
|
|
| 28.09.2017, 07:02 | |
Сообщение было отмечено mmk0102 как решение
Решение
mmk0102, какой кошмар. А нельзя ли пройтись по всей коллекции объектов, которые могут быть выбраны, и проверить их координаты на совпадение с выбранной точкой? Вот так просто, в лоб, без мути всякой с событиями.
Если объектов совсем много, то их дополнительно можно упорядочить в какой-нибудь отдельной структуре типа QuadTree или аналогичной.
0
|
|
|
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22
|
|
| 29.09.2017, 00:49 [ТС] | |
|
Объекты не в коллекции. И ничего не знают друг о друге: слабая связанность. Могут динамически создаваться и исчезать. Тут бы по идее подошел Observer, но он отсылает сообщения и что с ними сделают получатели - его не интересует.
Поэтому мне он не совсем подходит.
0
|
|
|
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
|
|
| 29.09.2017, 01:00 | |
|
Я бы записывал в данном случае координаты объекта в удобной структуре(при создании и движении). При всплытии события находил ближайший элемент по координатам и отправлял ему событие.
0
|
|
|
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,293
|
|
| 29.09.2017, 03:50 | |
|
mmk0102, так держите эти объекты в коллекции. При этом они ничего друг о друге знать всё равно не будут. О ни должен знать тот, кто будет проходиться по коллекции и искать нужный (по координатам или иными критериям). Механизм событий тут совершенно по не уместен.
1
|
|
|
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22
|
|
| 29.09.2017, 13:55 [ТС] | |
|
Пожалуй идея с коллекцией интересна. Буду ее пробовать.
Получается, события были бы уместны если не было обратной связи между издателем и подписчиками?
0
|
|
|
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,293
|
|
| 29.09.2017, 14:13 | |
|
mmk0102, события уместны там, где нужны СОБЫТИЯ о том, что что-то где-то изменилось, и где неизвестно кто и как на это отреагирует.
У вас же весь круг "ответственных лиц" известен: есть контроллер, который принимает ввод от пользователя и точно знает как на него реагировать. Добавлено через 2 минуты К тому же, такой подход с событиями выворачивает архитектуру приложения (если она есть): объекты, по мимо своих основных задач, должны ещё и знать про какое-то касание экрана и уметь рассчитывать какие-то расстояния. Тоже самое, как если бы санитары сами себе шприцы отливали и палаты строили.
0
|
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
||
| 29.09.2017, 17:12 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22
|
|
| 30.09.2017, 12:08 [ТС] | |
|
Ну, возможно они в коллекции на уровне игрового движка (Unity). Я же создаю красный круг (или черный квадрат), навешиваю на него скрипт, который меняет цвет (например), и больше никаких коллекций для меня не существует.
Но, как правильно сказали выше, можно создать такую коллекцию самому в объекте-контроллере, и в ней осуществлять поиск кандидата с нужными параметрами.
0
|
|
|
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,293
|
|
| 30.09.2017, 13:01 | |
|
mmk0102, если используется какой-то движок, то имеет смысл "покурить" его документацию. Такой функционал как поиск объекта по координатам должен быть реализован абсолютно в любом игровом движке.
0
|
|
|
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22
|
|
| 30.09.2017, 15:46 [ТС] | |
|
В Unity есть поиск по имени и тегу. По координатам сведется к тому что я делаю: цикл с перебором. Я в целом понял идею с коллекцией, буду ее использовать. Всем спасибо.
0
|
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
||
| 30.09.2017, 16:21 | ||
|
0
|
||
| 30.09.2017, 16:21 | |
|
Помогаю со студенческими работами здесь
12
Какой поведенческий паттерн выбрать? Какой паттерн лучше применить? Посоветуйте, какой паттерн можно применить? Какой паттерн/паттерны юзать для реализации задачи? Какой паттерн использовать в данном случае? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|