![]() |
![]() |
32167 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: ![]() ![]() ![]() |
Такая проблема: есть игра в разработке, похожая по движку на NOX.
В NOX'e объекты представляются в виде цилиндров с основнием в виде окружности. Как сделать чтобы герой, подойдя к преграждающему путь объекту, не стоял как вкопанный(возвращение старых координат),а плавно обходил его(окружность) в оптимальном направлении, как в Ноксе. Известны координаты центра героя(точка), центра окружности, ее радиус, а направление движения(или шаги смещения по X и Y) определяется так же как в Ноксе - положение мышки относительно героя(Эти координаты тоже известны). Должен быть какой-нибудь алгоритм или формула для осуществления плавного обхода преград. Еще желательно решить ту же проблему для столкновения со стенами, которые занимают 2мерный массив. Сообщение отредактировано: 32167 - 18.11.2006 3:19 Эскизы прикрепленных изображений ![]() ![]() |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Я вот что не понял.. Из твоего текста следует, что пересечения окружностей не должно быть, а должно быть только их касание. А на рисунке явное пересечение изображено.. Почему?
Что касается алгоритма, то не понимаю, какие сложности. Просто ведешь его по окружности радиусом R+r (R и r - радиусы препятствия и героя) с центром в центре окружности препятствия - и все. Я что-то недопонял? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
32167 |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я вот что не понял.. Из твоего текста следует, что пересечения окружностей не должно быть, а должно быть только их касание. А на рисунке явное пересечение изображено.. Почему? Что касается алгоритма, то не понимаю, какие сложности. Просто ведешь его по окружности радиусом R+r (R и r - радиусы препятствия и героя) с центром в центре окружности препятствия - и все. Я что-то недопонял? На рисунке окружность героя вычисляется в зависимости от размер его изображения(это скриншот из редактора игры, она для наглядности), его реальные размеры в игре - это точка. А радиус имеют только обЪекты. Даже если бы герой имел свои радиус,то почему просто r+R?Как получить конечную формулу для смещения его координат? Движение происходит пока нажата правая клавиша. Например, его координаты хранятся в MAP.OBJECTS.ITEMS[hero_index].x MAP.OBJECTS.ITEMS[hero_index].y а смещение при нажатии мышки определяется через угол, Stepx,StepY MAP.OBJECTS.ITEMS[hero_index].x:=MAP.OBJECTS.ITEMS[hero_index].x+stepx MAP.OBJECTS.ITEMS[hero_index].y:=MAP.OBJECTS.ITEMS[hero_index].x+stepy нужно найти эти смещеня в случае, когда он натыкается на обЪект. Герой должен скользить. В НОКС наверное все играли? |
![]() ![]() |
![]() |
Текстовая версия | 15.07.2025 8:11 |