Показать сообщение отдельно
Старый 31.03.2010, 12:27
denver вне форума Посмотреть профиль Отправить личное сообщение для denver Найти все сообщения от denver
  № 43  
Ответить с цитированием
denver

Регистрация: Jan 2010
Сообщений: 32
Котяра спасибо за наводки на изодвижки, попробовал рекомендованный тобой. Но пока я не до конца его распробовал чтоб решить мою проблемку, а может и фактор "своя рубаха ближе к телу" затмевает мне глаза

В догонку создания самого плиточного мира и сортировке по глубине, хотелось бы узнать как запустить свободногуляющих персонажей.

Предусловия (возможно повторюсь с выше написанными постами):
1. Все объекты на карте таскабелны и кликабельны в любой момент (таскабельность уже реализована в демке приложеной в раннем посте)
2. Статические объекты могут иметь габариты >= 1x1 клетку
3. Свободно гуляющие объекты имеют строгий габарит = 1х1 клетку (для простоты)
4. Плитка с которой связан хотя бы один объект считается занятой/непроходимой
5. У каждого объекта помещаемого на карту есть следующие свойства:
col, row - колонка и строка где находится 0-вая клетка объекта
cols, rows - габариты объекта (например 2 колонки х 1 строка)
6. Игровое поле 20х20 клеток

Мое решение:
1. Инит карты (создание плиточного поля и пр. подготовишки)
2. Добавляем статические объекты (которые не будут двигаться самопроизвольно)
3. Добавляем свободно гуляющие объекты (человечков)
3.1. Создаем человечка (далее Ч)
3.2. Определяем массив свободных плиток
3.3. Рандомно выбираем 2-е свободные плитки как начало (Н) и конец (К) маршрута по которому у нас пойдет Ч
3.4. Связываем Ч с плиткой Н и выводим Ч на экран в сооотв. с коодинатой плитки Н
3.5. По волновому алгоритму определяем путь от плитки Н до плитки К
3.6. Закидываем Ч и путь движения в "твинер" который будет двигать Ч по полю
3.7. goto 3.1.
4. Запускаем "твинер" который двигает человечков по полю.
Для перемещения объектов использовал либу Tweener, которая тупо двигает по x,y.
Предварительно путь у каждого Ч "нормализуется", т.е. выделяются точки пути: начальная, конечная и промежуточные точки где меняется направление
Эта "нормализация" нужна для плавного движения объекта от одной точки маршрута до другой.
"Твинер" после окончания движения формирует новый путь и запускает Ч по новому пути начиная с точки окончания предидущего пути.

Постоянно выполняющиеся циклы:
1. сортировка объектов по глубине (период .5 сек)
2. слежение за x,y-координатами гуляющих Ч для проставления у них свойств col и row (см. Предусловия) (период .5 сек)

Ухх скока буков написал. И так собственно проблема...
Нужно исключить случаи когда путь Ч в один момент времени пересекался бы с путем другого Ч.
По логике когда такое произойдет один из Ч должен обойти другого или у одного из них должен сгенерироваться новый путь начиная с точки "столкновения"
Как то путанно я неверно выразился