У меня есть куча объектов Tank, вставленных в дерево квадроциклов. На некоторые из этих объектов резервуара можно щелкнуть, если они реализуют интерактивный интерфейс. Проблема в том, что для того, чтобы узнать, что щелкнули, мне нужно запросить одно и то же дерево квадрантов, но в нем есть как кликабельные, так и не кликабельные объекты.
Возможные решения:
Я мог бы использовать instanceOf, чтобы увидеть, какие из них в указанной области были кликабельны, когда пользователь нажимал на экран, но я слышал, что использование instanceOf — плохая практика.
Я мог поддерживать ДВА дерева квадроциклов. один только для танков и один для интерактивных объектов. Но тогда мне, возможно, придется обновить резервуары, которые реализуют интерактивный интерфейс ДВАЖДЫ, поскольку они будут находиться в двух отдельных квадрантах, что будет медленно, учитывая, что мне нужно обновлять каждый шаг, а люди только время от времени щелкают по экрану.
Я мог только вставлять интерактивные объекты в дерево квадрантов и просто заставлять неактивные объекты определять методы фиктивного клика. Это решило бы проблему, но это не кажется правильным, потому что если что-то не кликабельно, то для начала не следует реализовывать методы щелчка, даже если это пустой. Или это нормально?
Я думаю, что № 3, вероятно, лучший способ сделать это, но я не уверен. Любые указатели?
РЕДАКТИРОВАТЬ: Теперь, когда я думаю об этом, # 3 будет иметь некоторые проблемы с перекрывающимися кликами. Если неактивный резервуар перекрывает интерактивный, и я щелкаю в разделе перекрытия, если я не вызову все методы щелчка для всего в этой точке, я могу в конечном итоге вызвать метод щелчка неправильного резервуара. Чтобы избежать ЭТОГО, мне пришлось бы использовать instanceOf и найти объект, на который можно щелкнуть, и вызвать только метод ITS click.
Так что, может быть, № 2 лучше, потому что я мог бы легко перебрать все кликабельные объекты в выбранной области и выбрать тот, который находится либо вверху, либо ближе всего к центру области, и вызвать только этот метод щелчка танков.
Также может быть, что они не обязательно перекрываются, а просто находятся близко друг к другу. Если бы я сделал эту игру основанной на касании, ваш палец был бы не точкой, а областью, поэтому, возможно, было бы лучше циклически перемещаться по объектам в области и находить ближайший объект, на который можно нажать, что было бы трудно сделать с помощью 3#. не перебирая кучу некликабельных объектов.