Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Алгоритм расположения клипов разного размера на сетке (http://www.flasher.ru/forum/showthread.php?t=170215)

Alex626 20.10.2011 21:04

Алгоритм расположения клипов разного размера на сетке
 
Здравствуйте!

Мне нужно реализовать расположение на определённой сетке, состоящей из клеток, клипов разного размера (1х1 и 1х2 клетки). С размером 1х1 я разобрался, и реализовал перетаскивание и отпускание. Мой алгоритм вычисляет математически координаты ближайшей к перетаскиваемому клипу клетки, и при отпускании ставит его именно в ячейку. Если клетка занята другим клипом, то перетаскаваемый клип возвращается при отпускании на своё место. Клипы сортируются при создании,

Но вот с элементами неквадратной формы (1х2) возникли проблемы. Непонятно, как именно реализовать размещение и сортировку таких элементов. Можете подсказать принцип?

mooncar 20.10.2011 21:39

Что вы подразумеваете здесь под сортировкой?
Где именно трудность с размещением? Они у вас первоначально где-то на панели, и вы их перетаскиваете в рабочую зону?
Постоянна ли ориентация этих элементов 1x2 или предполагаются повороты?

В общем, информации мало.
Если изначально они на панели и их надо сориентировать, то можно элемент поворачивать последовательно на 90 гр. по клику на элементе в этой панели, перед перетаскиванием.
Была такая игра - NetStorm, там из элементов различной формы (1x1, 2x1, Г-образ.) надо было собирать конструкцию-мост. Этот алгоритм был реализован, но там можно было крутить элемент по клику правой, пока он оставался "приклеен" к мыши. А по клику левой, если место было выбрано удачно, он на него вставал.

Расчет также можно вести математически, создав модель сетки и проверяя при выборе места, не занято ли выбранное место (как для 1x1, так и 1x2 элементов).

Alex626 20.10.2011 21:50

В целом, это похоже на инвентарь, как в сталкере. Предметы появляются по вызову функции на сетке, в свободном месте, которое определяется функцией. Есть 2 типа иконок - квадрытные, и прямоугольные. Программа должна определять расположение, перетаскивание и отпускание элементов.

mooncar 20.10.2011 21:55

Ну она же из каких-то соображений определяет это расположение?
И что значит "определять... перетаскивание и отпускание"?
Что конкретно у вас не получается?

Alex626 20.10.2011 22:08

Вы в сталкер играли? Там можно перетаскивать иконки как угодно по сетке. Когда подбираешь новое оружие, оно появляется в инвентаре на сетке. Алгоритм определяет координаты для каждого элемента, и размещает их. Это расположение.

При перетаскивании элементов опять же проверяется отпускание элемента - свободно ли место под ним ,или нет? Это перетаскивание и отпускание. Я это имел ввиду. Всё это работает для квадратных элементов в моём алгоритме. Но я не знаю, как сделать работу с элементами размера MxN.

По сути, мне нужно каждый раз определять сколько клеток занимает элемент, брать левую-верхнюю клетку на сетке под элементом, отсчитывать от неё количество занимаемых элементов и проверять свободны ли они. Но какую модель нужно разработать, чтобы она была универсальна? Можете подсказать, или показать?

mooncar 21.10.2011 00:30

Понятно. Нет, в Сталкера не играл, но в Диабле и Невервинтере такой же принцип, с ними я знаком. Лучше конечно, не городить огород, а сделать все итемы однослотными, как в иных играх - и производить оценку по "весу" + количеству слотов (в Линейке и других MMORPG, например, так). Это на много бы упростило вам мат. модель инвентаря.
А уж если на то пошло, и хочется как-то учитывать габариты итемов, то игрока стоило бы разгрузить от перепаковки инвентаря и производить ее автоматически всякий раз при получении итема. Тогда задача тоже бы упростилась.
Но это ваше, конечно, дело.

По сути есть две части задачи: автоматический прием очередного итема в сразу "правильное" место при поднятии и расстановка итемов игроком.

Что касается второго, то нужно создать "двумерный" массив, отражающий инвентарь и при добавлении в него итема производить запись в соотв. клетки значения, можно простое булево true. При попытке опустить итем в слоты определять позицию элементов в "двумерном" массиве и делать их проверку на true по заданной конфигурации. Если не понимаете, как эмулируется двумерный массив в AS2, почитайте или спросите, если не поймете.

Что касается первого, т.е. алгоритма оптимальный автоматической укладки, сейчас не смогу ничего выдать, возможно, кто-то подскажет.

Alex626 21.10.2011 00:37

Спасибо!


Часовой пояс GMT +4, время: 07:00.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.