Сложная проблема глубокой сортировки на основе местоположения MC - PullRequest
0 голосов
/ 05 октября 2011

Мне нужна помощь в спасении проекта, касающегося экстремального управления глубиной. У нас нет идей!

Проект касается укладки ящиков разных размеров, каждый из которых изометричен - так, чтобы глубина играла (нам нужно сплести этот ящик перед этим ящиком, но поверх двух ящиков и ниже другого, и т. Д.) - все идет!)

Вот проект в его нынешнем виде:

http://clearlytrained.com/depth/

Вы можете перетащить прямоугольники, затем отпустить по сетке, если пространство сетки зеленое - если вы возьмете два прямоугольника, занимающих одно пространство сетки, поместите их рядом с друг другом, а затем возьмите более широкое поле (2x2) и поместите его поверх обоих (так, чтобы промежуток в двух нижних полях находился посередине прямоугольника, который вы поместили сверху), вы увидите, что глубина крайне правого нижнего прямоугольника теперь выше и выше прямоугольника сверху. Я полностью понимаю, почему это происходит, но независимо от того, как мы проведем по сетке по порядку, это будет происходить до некоторой степени в том виде, в каком оно сейчас стоит.

То, как мы в настоящее время сортируем глубину, заключается в просмотре массива сетки, в котором хранится имя каждого блока на экране, в зависимости от направления, которое мы проводим по строкам и столбцам, мы получаем порядок, который мы затем устанавливаем для каждого из них. глубина коробки Проблема в том, что хотя блок может занимать 6 пространств сетки, мы не устанавливаем глубину 6 раз - мы устанавливаем его только при первом обращении к имени его экземпляра в массиве - поэтому, если мы просматриваем сетка снизу вверх, слева направо, блок, который физически находится под другим блоком, но далее справа всегда будет иметь большую глубину. не хорошо!

Единственный способ, как я могу это исправить, это выяснить, какое-то сравнение между блоками для первых значений X, а затем для Y, установить некое подобие типа double для условий цикла / состояния и, более или менее, программно вручную устанавливайте глубину каждого ящика каждый раз, когда мы перемещаемся, или помещаем новый ящик. Таким образом, сложность заключается в том, чтобы установить глубину по порядку имени экземпляра блока, сравнить это поле с каждым другим блоком, затем с каждым другим блоком с каждым другим блоком и найти реальный порядок, который нам необходим для суммирования их глубины. В некоторых случаях мы можем перейти слева направо, затем снизу вверх, а затем обратно слева направо - нет плавного рисунка.

Пожалуйста, поиграйте с предоставленной ссылкой, дайте мне знать, если у вас есть какие-либо вопросы или вам нужна дополнительная информация, я в отчаянии!

1 Ответ

0 голосов
/ 05 октября 2011

Я бы добавил все поля в массив и отсортировал их по значениям X и Y (плитки X и Y).Это не большой набор, так что вам не нужно беспокоиться о производительности.

Сортировка по X, затем, если X одинаковый, сортировка по Y. Это все решит, если я не пропустил что-то очевидное.

...