Страница 1 из 1

Подскажите алгоритм для пазла!

СообщениеДобавлено: 12 ноя 2015, 12:48
eonyanov
Всем привет!
Представьте, у вас есть картина, которая разорвана на несколько разных частей.
Границы неровные, все части разных размеров.
Игроку нужно собрать из кусочков цельную картину.
Причем, когда игрок правильно подносит одну часть к другой, рядом с той неподвижной частью возникает темный силуэт передвигаемой части.
А когда игрок отпускает мышку, части они "склеиваются" и потом уже передвигаются вместе.

Подскажите алгоритм, как такое можно реализовать?
Хотя бы куда копать?
Не обязательно на Юнити, может кто на флеше делал или еще как.
Важен сам алгоритм, ну и предварительная настройка картинок.

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 12 ноя 2015, 13:00
waruiyume
На сторе есть пазл стартер киты.

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 12 ноя 2015, 13:18
eonyanov
На сторе из бесплатных я пробовал Puzzle Maker 3 Lite.
Но там этот функционал кривоват и нет подсветки, о которой я писал. Плюс ко всему, весь функционал залит в dll.
Так что даже не подправить ничего.

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 13 ноя 2015, 10:54
jet_aleks
в чем собственно сложность??
на каждый пазл вешаешь скрипт драга, создаешь менеджер который обрабатывает все склеивания,
рассчитываешь дистанцию между пазлами, каждому пазлу свой id, пару масивов в менеджер. и все ровные руки.


или у вас в чемто ином сложности?

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 13 ноя 2015, 11:54
ilka
рассчитываешь дистанцию между пазлами

Зачем это? можно просто создать сетку к каждой ячейке сетки свой пазл.

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 13 ноя 2015, 12:33
Cr0c
ilka писал(а):
рассчитываешь дистанцию между пазлами

Зачем это? можно просто создать сетку к каждой ячейке сетки свой пазл.

А если куски не квадратные? Лучше тогда перекрестные ссылки на соседей с вектором расстояния между ними. Если (вектор_расстояния - вектор_расстояния_текущий).SqrMagnitude <= 0.01 то приклеиваем куски друг к другу. Но это подразумевает процедурную нарезку изображения/меша.

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 13 ноя 2015, 17:45
jet_aleks
темболее , человек хочет двигать уже несколько заранее с клееных кусков

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 13 ноя 2015, 19:34
ilka
темболее , человек хочет двигать уже несколько заранее с клееных кусков

Опять повторяю вопрос: в чем проблема использовать сетку? Перетаскиваете склеенные пазлы, с расчетом общей(склеенной) площади фигуры и области куда перетаскиваете.

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 14 ноя 2015, 10:50
Wite
Я в пазле мерил растояние и угол рядом стояших элементов и заносил их в массив. Тоесть у каждого обьекта массив элементов которые к ниму должны присоеденятся. Когда хватаем объект начинается проверка на растояние и угол до этих обьектов в массиве. Когда происходит присоединение пихаем обьект в дочки к ведущему и убераем из массива.
Сетка тут не пойдет потому ка куски пазла не ровные. Треугольные вкадратные круглые.

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 14 ноя 2015, 11:25
Cr0c
Wite писал(а):Я в пазле мерил растояние и угол рядом стояших элементов и заносил их в массив.

Это производные от вектора ))) чтобы лишнее не считать их и использовать. Чем ближе куски к оригиналу, тем меньше разница векторов текущего положения и оригинального (между кусками векторы которые).

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 14 ноя 2015, 12:52
ilka
Сетка тут не пойдет потому ка куски пазла не ровные. Треугольные вкадратные круглые.

круглые

:-?

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 14 ноя 2015, 13:10
Cr0c
ilka писал(а):
Сетка тут не пойдет потому ка куски пазла не ровные. Треугольные вкадратные круглые.

круглые

:-?

Вырезал один кусок круглый - и что? :) не все же куски круглые.

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 14 ноя 2015, 15:46
Wite
У меня было както так

.jpg

Re: Подскажите алгоритм для пазла!

СообщениеДобавлено: 23 ноя 2015, 09:05
eonyanov
Cr0c писал(а):
ilka писал(а):
рассчитываешь дистанцию между пазлами

Зачем это? можно просто создать сетку к каждой ячейке сетки свой пазл.

А если куски не квадратные? Лучше тогда перекрестные ссылки на соседей с вектором расстояния между ними. Если (вектор_расстояния - вектор_расстояния_текущий).SqrMagnitude <= 0.01 то приклеиваем куски друг к другу. Но это подразумевает процедурную нарезку изображения/меша.


Так и сделал.
При инициализации менеджер находит все куски пазла, каждому присваивает id (будем считать "номер группы").
Потом в каждый кусок передает найденный массив кусков.
Каждый кусок для себя создает массив расстояний доя других кусков.
Далее при перетаскивании идет проверка на близость (все действия дублируются для всех кусков с таким же id, как у текущего. Далее объясню.).
Если близко, склеиваем и меняем у текущего куска id на кусок, к которому приклеились. Теперь они у нас в группе с одним id.
Общий список кусков с их id хранится в менеджере.

Когда у всех кусков будет один id, пазл собран.

Процедурную нарезку не использую. Всё делается на uGUI. Необходимо изначально собрать картинку из кусков на сцене, далее при запуски идет инициализация и рандомный разброс кусков о определенной области.