|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Sep 2010
Сообщений: 167
|
Алгоритм расположения клипов разного размера на сетке
Здравствуйте!
Мне нужно реализовать расположение на определённой сетке, состоящей из клеток, клипов разного размера (1х1 и 1х2 клетки). С размером 1х1 я разобрался, и реализовал перетаскивание и отпускание. Мой алгоритм вычисляет математически координаты ближайшей к перетаскиваемому клипу клетки, и при отпускании ставит его именно в ячейку. Если клетка занята другим клипом, то перетаскаваемый клип возвращается при отпускании на своё место. Клипы сортируются при создании, Но вот с элементами неквадратной формы (1х2) возникли проблемы. Непонятно, как именно реализовать размещение и сортировку таких элементов. Можете подсказать принцип? |
|
|||||
Модрон-ветеринар
|
Что вы подразумеваете здесь под сортировкой?
Где именно трудность с размещением? Они у вас первоначально где-то на панели, и вы их перетаскиваете в рабочую зону? Постоянна ли ориентация этих элементов 1x2 или предполагаются повороты? В общем, информации мало. Если изначально они на панели и их надо сориентировать, то можно элемент поворачивать последовательно на 90 гр. по клику на элементе в этой панели, перед перетаскиванием. Была такая игра - NetStorm, там из элементов различной формы (1x1, 2x1, Г-образ.) надо было собирать конструкцию-мост. Этот алгоритм был реализован, но там можно было крутить элемент по клику правой, пока он оставался "приклеен" к мыши. А по клику левой, если место было выбрано удачно, он на него вставал. Расчет также можно вести математически, создав модель сетки и проверяя при выборе места, не занято ли выбранное место (как для 1x1, так и 1x2 элементов).
__________________
Идите первым! Последний раз редактировалось mooncar; 20.10.2011 в 21:48. |
|
|||||
Регистрация: Sep 2010
Сообщений: 167
|
В целом, это похоже на инвентарь, как в сталкере. Предметы появляются по вызову функции на сетке, в свободном месте, которое определяется функцией. Есть 2 типа иконок - квадрытные, и прямоугольные. Программа должна определять расположение, перетаскивание и отпускание элементов.
|
|
|||||
Модрон-ветеринар
|
Ну она же из каких-то соображений определяет это расположение?
И что значит "определять... перетаскивание и отпускание"? Что конкретно у вас не получается?
__________________
Идите первым! |
|
|||||
Регистрация: Sep 2010
Сообщений: 167
|
Вы в сталкер играли? Там можно перетаскивать иконки как угодно по сетке. Когда подбираешь новое оружие, оно появляется в инвентаре на сетке. Алгоритм определяет координаты для каждого элемента, и размещает их. Это расположение.
При перетаскивании элементов опять же проверяется отпускание элемента - свободно ли место под ним ,или нет? Это перетаскивание и отпускание. Я это имел ввиду. Всё это работает для квадратных элементов в моём алгоритме. Но я не знаю, как сделать работу с элементами размера MxN. По сути, мне нужно каждый раз определять сколько клеток занимает элемент, брать левую-верхнюю клетку на сетке под элементом, отсчитывать от неё количество занимаемых элементов и проверять свободны ли они. Но какую модель нужно разработать, чтобы она была универсальна? Можете подсказать, или показать? |
|
|||||
Модрон-ветеринар
|
Понятно. Нет, в Сталкера не играл, но в Диабле и Невервинтере такой же принцип, с ними я знаком. Лучше конечно, не городить огород, а сделать все итемы однослотными, как в иных играх - и производить оценку по "весу" + количеству слотов (в Линейке и других MMORPG, например, так). Это на много бы упростило вам мат. модель инвентаря.
А уж если на то пошло, и хочется как-то учитывать габариты итемов, то игрока стоило бы разгрузить от перепаковки инвентаря и производить ее автоматически всякий раз при получении итема. Тогда задача тоже бы упростилась. Но это ваше, конечно, дело. По сути есть две части задачи: автоматический прием очередного итема в сразу "правильное" место при поднятии и расстановка итемов игроком. Что касается второго, то нужно создать "двумерный" массив, отражающий инвентарь и при добавлении в него итема производить запись в соотв. клетки значения, можно простое булево true. При попытке опустить итем в слоты определять позицию элементов в "двумерном" массиве и делать их проверку на true по заданной конфигурации. Если не понимаете, как эмулируется двумерный массив в AS2, почитайте или спросите, если не поймете. Что касается первого, т.е. алгоритма оптимальный автоматической укладки, сейчас не смогу ничего выдать, возможно, кто-то подскажет.
__________________
Идите первым! |
|
|||||
Регистрация: Sep 2010
Сообщений: 167
|
Спасибо!
|
Часовой пояс GMT +4, время: 22:51. |
|
« Предыдущая тема | Следующая тема » |
|
|