Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Ігри";
Поточний архів: 2004.12.12;
Завантажити: [xml.tar.bz2];

Вниз

пошук шляху не по клітинам ... Знайти схожі гілки


Ландграф Павел ©   (2004-08-04 12:07) [0]

Дык вот, у меня в игре непроходимые участки выглядят как массив TRect, есть ли у кого совет, или ссылочка на подобный алгоритм поиска пути не по клеткам...



Белый Крыс ©   (2004-08-04 12:35) [1]

Если статика, то можно перевести в клетки :), и искать по клеткам.
Вообще я считаю, что по клеткам легче и удобнее всего, а привести к клеткам можно ВСЕ.



cyborg ©   (2004-08-04 13:01) [2]


> [1] Белый Крыс ©   (04.08.04 12:35)

Підтримую!



Ландграф Павел ©   (2004-08-04 13:55) [3]

Белый Крыс>ага, в каждую клетку вносить TRect координаты, потом поиск пути будет относительно этих координат... не слижком уж тупо? для чего разводить массивы, если один одномерный с TRect уже есть...



VolanD   (2004-08-04 13:55) [4]

Замути маску карты (в виде картинки) и проверяй на столкновение.



Белый Крыс ©   (2004-08-04 14:03) [5]

Ты не понял. Зачем TRect вносить в клетку.
1) С TRect массив после перевода в клетки уже не нужен.
2) Какая ситуация? ректы занесены еще при создании карты? Тогда еще проще, сразу переводишь в клетки и используешь в игре.
3) Клетки могут быть и маленьких размеров (8*8, 4*4 и т.п.)

1) Маску лично я не делал. Может и можно, но прийдется хранить маску именно в файле.
2D еще ладно, а вот 3D думаю точно по клеткам.



Ландграф Павел ©   (2004-08-04 14:39) [6]

Я ж спросил про TRect, нихочу я никакие клетки... ни форум, а общество принуждения какое-то...



Digitman ©   (2004-08-04 14:49) [7]


> Ландграф Павло © (04.08.04 14: 39) [6]


http://www.codenet.ru/progr/alg/way.php
http://emanual.ru/download/716.html
http://andrey.nnov.ru/articles.php?a=10
http://www.firststeps.ru/theory/karta.html



Белый Крыс ©   (2004-08-04 15:52) [8]

На самом деле TRect НИЧЕМ НЕ отличается от клеток в смысле алгоритма нахождения пути. Более того во второй ссылке вопрос "Как постоить кратчайший маршрут между двумя точками, если пространство задано в виде обычной растровой карты?" по сути - твой. А волновой алгоритм во всех четырех ссылках упоминается.
Я ж спросил про TRect, нихочу я никакие клетки...
Надо Паша, НАДО! :)



Ландграф Павел ©   (2004-08-05 13:44) [9]

читаю, разбираюсь, пасибо Digitman, Белый Крыс=))



Micah'GF ©   (2004-08-05 14:13) [10]

у меня есть прога "Path search demo" от Браина Стоута (Bryan Stout) - она в графическом виде демонстрирует работу нескольких алгоритмов поиска (больше 10), с ней идут описания трех из них. Еще есть несколько описаный отдельно. Где все это качал уже не скажу, а выслать могу если кому надо. Весит все это не больше 700кб.



Megabyte-CeerCop ©   (2004-08-05 14:29) [11]

Micah`GF
Спрашиваешь ещё!
Это нужно всем!!! Только я первый в очереди!!!



Белый Крыс ©   (2004-08-05 14:48) [12]

2 Micah"GF
Лучше ссылку выложи. Т.е. закачай на сайт какой-нибудь.



Ландграф Павел ©   (2004-08-05 20:07) [13]

Micah"GF>кинь на freeart@kemtel.ru плиз... я пока пробую с алгоритмом A*, довольно-таки быстрый, волновой мне не к чему... у меня же не супер-лабиринты=)



Micah'GF ©   (2004-08-06 07:51) [14]

можно скачать отсюда http://200mb.org/files/temp/pathfind.rar



Ландграф Павел ©   (2004-08-06 12:01) [15]

блин, путь нашел, получил 2-у мерную матрицу (ячейка 16х16) с waypoint`ами... перенес эти точки в одномерный массив героя, как теперь эту скотину заставить идти по этим точкам... я думаю надо так: найти угол между моим положением и следующей точкой и шагать... я тут формулу нашел, но что-то он туда не идет...
Angle:=((Trunc(RadToDeg(ArcTan2(NextY*16-Y,NextX*16-X))+202.5) div 45)*45)-180;
X:=X+Speed*Cos(DegToRad(Angle));
Y:=Y+Speed*Sin(DegToRad(Angle));
Если пришли удалять эту точку из локального массива точек...
С математикой к меня туго со школы, так что сильно не опускайте, напишите у кого с ней нету проблем...
в школе была 3-ка все жисть... и то из жалости))



Zer0_forgot_password   (2004-08-06 17:33) [16]

можно сделать по тупому:

dx:=nextx*16-x; dy:=nexty*16-y; d:=sqrt(dx*dx+dy*dy);
if (d<=speed)
 пришли, обрабатываем слелующую точку
ще
починати
 x:=x+dx/d*speed;
 y:=y+dy/d*speed;
end;

определяем вектор направления движения, если до точки еще не дошли то нормализуем его (1-ная длинна) и умножаем на скорость.

если хочется чтобы перс гулял толко по углам кратным 45 градусам можно сделать следующее
dx:=sign(nextx*16-x); dy:=sign(nexty*16-y);

зы код не проверял но работать должен 99.8%



Ландграф Павел ©   (2004-08-07 09:51) [17]

Zer0_forgot_password>да, спасибо, работает!



сторінки: 1 вся гілка

Форум: "Ігри";
Поточний архів: 2004.12.12;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.87 MB
Час: 0.065 c
3-1100498357
Фазер
2004-11-15 08:59
2004.12.12
Вітаю всіх! Питання по обробці except при коннекте в БД


1-1101895430
denis24
2004-12-01 13:03
2004.12.12
listbox-> event


3-1100599067
Algiz
2004-11-16 12:57
2004.12.12
Бази даних


14-1101213427
pasha_golub
2004-11-23 15:37
2004.12.12
МВС: Людські якості


4-1098963515
грифон
2004-10-28 15:38
2004.12.12
Дізнатися шлях до excel





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в&#39;єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська