Головна сторінка
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.62 MB
Час: 0.062 c
1-1101835794
Стефан
2004-11-30 20:29
2004.12.12
Як викинути іконку з ресурсу в DLL-ке?


1-1101638291
AdmeraL.
2004-11-28 13:38
2004.12.12
Форма


3-1100521367
VadimK
2004-11-15 15:22
2004.12.12
Створення Cursor в ХП, через компоненти DBExpress


14-1100852166
msguns
2004-11-19 11:16
2004.12.12
"Пошарпаний ліщина"


1-1101872940
HELPMEPLEASE
2004-12-01 06:49
2004.12.12
Як в DBGrid-e зробити фіксовані колонки





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