Я думаю, это помогло бы вам представить эту проблему как список, который мог бы быть длиной «бесконечности» и иметь уровни вложенности «бесконечности». Прямо сейчас, здесь много жестко закодированных чисел и текста, и ваш интервал задан очень жестко. Чтобы думать об этом в терминах бесконечного списка, вы должны начать с правил, которые применяются к каждому уровню расширения и свертывания.
- Каждый элемент отображается
Y
пикселей ниже предыдущей группы элементов.
- Каждая подгруппа появляется
X
справа от родительской группы.
- Когда группа распадается, дети в ней скрываются.
- Родительский элемент содержит все его дочерние элементы.
Отсюда вы можете представить, что каждый элемент в списке также является группой элементов (и элементы внутри этой группы являются группами элементов (и элементы внутри этой группы ...)). Это известно как составной шаблон проектирования . Если бы вы создали способ для позиции, в которой содержались бы дочерние элементы, возможно, сделав каждый спрайт с дочерними отображаемыми объектами, вы можете легко получить высоту группы (развернутую или свернутую) и рассматривать ее как единое целое. Когда группа расширяется, дочерние объекты добавляются в группу (используя addChild
), а когда она свернута, они удаляются (removeChild
).
Создав новый класс, представляющий строку контрольного списка, это поможет вам сохранить инкапсуляцию этих элементов в меньшем объеме, чтобы легче было работать с пакетами, чтобы вы не перемещались по меткам и флажкам повсюду, а просто в одну строку пункт / группа. Эта группа может содержать список объектов позиций, которые, в свою очередь, могут содержать больше списков. Функциональность остается более или менее одинаковой, независимо от того, сколько уровней она проходит.
Я понимаю, что все это скорее введение в объектно-ориентированное программирование, чем прямой ответ, но изучение этого материала окупится в значительной степени. Подводя итог, можно сказать, что код, который вы разместили, пытается заставить эти объекты занимать определенные позиции в зависимости от конкретных случаев, и я думаю, что ответ заключается в том, чтобы попытаться создать объекты, которые могут адаптироваться к ситуации на основе установленных вами правил.