Войти
ПрограммированиеФорумИгровая логика и ИИ

CrystalPathFinding (CPF) - экстремально быстрый и простой A*/WA* для карт на тайлах (30 стр)

Страницы: 125 26 27 28 29 30
#435
11:01, 7 мая 2016

DevilDevil
ну да фиг знает может ты забил на проект.
не, очень сложно трассировать в сервере когда карту последовательно юзают куча ботов.
я бы мог это списать на повреждения памяти, но без этого работает норм.

разбираться в коде с оптимизациями сложно:DDD но я находил в цпф тот участок где он уходит в бесконечный цикл.
кстати тема с "секторизацией" забавная, я даже добавил метод GetSector(x,y):byte вроде норм. я так понял их максимум 255 может быт?


#436
12:25, 7 мая 2016

Mira
> ну да фиг знает может ты забил на проект.

Я его не для того разрабатывал, чтобы забивать )

> я даже добавил метод

Может в этом дело? Там ведь не все так просто

> но я находил в цпф тот участок

А чего не выложил?
В общем предлагаю собраться силами и исправить баг. С тебя сделать проект, в котором можно повторить ошибку, и желательно побыстрее. С меня - исправить и выложить обновление.

#437
15:03, 7 мая 2016

DevilDevil
> Может в этом дело? Там ведь не все так просто
нет, я его добавил после неприятностей с мультипоиском. если не правильно скажи что еще добавить. ну у меня пока работает)

function TTileMap.GetSector(x,y:word):byte;
begin
  if (Self.SectorTest) then
  begin
    if (FActualInfo.SectorsChanged) then ActualizeSectors;
  end;
  result:= PByte(NativeInt(FActualInfo.Sectors) +
        NativeInt(Width) * Y + X)^;
end;

function TTileMap.GetSector(const pt:TPoint):byte;
begin
  if (Self.SectorTest) then
  begin
    if (FActualInfo.SectorsChanged) then ActualizeSectors;
  end;
  result:= PByte(NativeInt(FActualInfo.Sectors) +
        NativeInt(Width) * pt.Y + pt.X)^;
end;
зачем я его сделал? просто иногда случаются ситуации что нужно найти путь из точки помеченной как препятствие, или цель находится на "барьере". пазфиндер в этом случае даст фейл при любых настройках а мне нужно дойти хотябы до ближайшей клетки.
щас я просто ищу свободную точку по бокам этой, и проверяю в том же секторе точка А что и Б или нет. если в том же то создаю путь. костыльно конечно но работает.
DevilDevil
> А чего не выложил?
предупредил вероятных пользователей либы, что могут быть проблемы в этом месте. думал тебя забанили наглухо)
#438
15:43, 7 мая 2016

Mira

А разве у меня в аккаунте не пишут, до какого банят? )
То что тебе нужно - делается без проблем с тайлами. Препятствия имеют нулевой тайл

#439
15:53, 7 мая 2016

DevilDevil
ну вот иногда оказывается что в нулевом тайле цель и нужно дойти до соседней клетки. пазфиндер не идет когда цель в барьере

#440
15:59, 7 мая 2016

кстати паралельный поиск из нескольких точек дает профит в скорости кроме удобства или нет?

#441
19:50, 7 мая 2016

Mira

Вот и я про то. Когда ты смотришь клетки рядом - ты можешь смотреть не сектора, а тайлы. Т.е. если тайл не 0 - можешь смело запускать пасфайндинг. Поиск из нескольких точек не медленнее, а в ряде случаев может осуществляться быстрее.

#442
21:47, 7 мая 2016

DevilDevil
угу, а если цель оказалась на замкнутой линии-барьере а первый свободный тайл нащупается внутри периметра, то попытка к нему пройти сфейлится)

#443
22:59, 7 мая 2016

Mira

Ну да, а что делать )
Зато корректно )
У тебя кстати в функции будет AV на FActualInfo.Sectors свойство SectorTest не выставлено

#444
23:24, 7 мая 2016

DevilDevil
оно всегда выставлено. но да, нужно добавить проверку)
хорошо бы пазфиндер мог сам находить ближайшую точку куда подойти, но проверка дистанции резко замедлит его работу

Прошло более 1 года
#445
23:20, 1 июля 2017

благодарю за техподдержку в модификации кода пф =)

Страницы: 125 26 27 28 29 30
ПрограммированиеФорумИгровая логика и ИИ

Тема в архиве.