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

Проблема с определением коллизий

Страницы: 1 2 Следующая »
#0
18:54, 28 июля 2018

В наличии java+libgdx.  Игровое поле разделил на квадраты и все объекты с которыми можно столкнуться или которые можно съесть рассортировал по квадратам. При перемещение игрока и мобов сначала проверяю какой у меня рабочий квадрат, а потом перебором проверяю столкновения(съедение). 

При десяти мобах  начинаются подтормаживания.  Как можно еще ускорить алгоритм?


#1
19:27, 28 июля 2018

Варианты:
1. Нанять более опытного програмиста.
2. Запустить на более мощном железе.
3. Запостить алгоритм и ждать, что кто-нибудь его прочтёт, поймёт чего автор хотел добиться и пришлёт свой "правильный" вариант.

#2
21:53, 28 июля 2018

andrkhar
1 и 2 вариант не реал.
3.

  private Boolean CheckCollizion(Rectangle CheckRectangle)
  {
    Iterator<SubZone> iter = area_zone.iterator();
    SubZone checkZone;

    while(iter.hasNext())
    {
      checkZone = iter.next();
      if(checkZone.getBoundRectangle().overlaps(CheckRectangle))
      {
        // Тестируемый прямоугольник попадает в субзону
        // проверим на столкновения по субэлементам
        Iterator<AdvSprite> itersubz = checkZone.items.iterator();
        AdvSprite checkSprite;
        while(itersubz.hasNext())
        {
          checkSprite =  itersubz.next();
          if(checkSprite.getBoundingRectangle().overlaps(CheckRectangle))
          {
            return true;
          }
        }
      }
    }

    return false;
  }
#3
1:13, 29 июля 2018

Сделать оптимизацию , с помощю роздиления пространства AABB-tree тогда сложность алгоритма будет O(log(n)), а ещё лутше сделать  static-greed и проверять на колизии только в 8 смежных ячееек!

#4
2:42, 29 июля 2018

werasaimon
Про деревья AABB я нашел информацию, а вот по поводу static greed. Подскажите что можно почитать?

#5
9:11, 29 июля 2018

Не проходи по  всем зонам. Зоны храни в дномерном массиве по индексу [x/zonewidth + y / zoneheight * mapwidth]. Ты будешь получать нужную зону без перебора. Зона должна иметь список смежных с ней зон, в которых нужно перебирать юнитов.
Иначе ты получаешь тормоза не только при пересчете колизий, но и при помещении юнита в сетку.

#6
12:15, 29 июля 2018

Невидимый холст + побитовое сравнение растра

#7
17:10, 29 июля 2018

aggel78
На тут всё есть . https://m.habr.com/post/135948/
P.S: в этой статьи static-greed называеться регулярная сеть!

#8
19:10, 29 июля 2018

А что если:
В каждой клетке хранить соседние клетки.
Когда игрок/моб входит в другую клетку. Запрашивает у неё соседей.
И проверяешь коллизии по 8 или 9 клеткам, как нравится.

Минусы:
1. Твой объект должен быть площадью меньше либо равной клетке(можно попробовать у соседей, соседей спросить).
2. Потратишь больше времени вначале на создание объектов клеток.
3. Памяти больше съест.
Зато потом быстро.

#9
19:45, 29 июля 2018

aggel78
>
> При десяти мобах  начинаются подтормаживания.  Как можно еще ускорить алгоритм?

Блжад, что?

Я пять раз прочитал, и все-равно не поверил. при ДЕСЯТИ мобах - тормоза? КАК? Как можно написать влобный алгоритм чтобы он тормозил на современном железе при ДЕСЯТИ мобах?

#10
20:48, 29 июля 2018

jaguard
Может он на каком-нибудь расбери пае запускает. Вообще ты в России или где, чтобы чему-то удивляться?
Предложи лучше свою версию алгоритма, у нас тут мозговой штурм, а не эмоциональный понос.

#11
23:51, 29 июля 2018

jaguardЖелезо пятилетней давности, да еще слегка не быстрое.
Antutu  12.473
GeekBench  573
3DMark  3.812
PCMark  968

#12
23:56, 29 июля 2018

aggel78
> jaguardЖелезо пятилетней давности, да еще и бюджетное.

Ну не 55-летней же. В тормоза на intel 8008 еще поверю.

#13
0:21, 30 июля 2018

jaguard
> > jaguardЖелезо пятилетней давности, да еще и бюджетное.
> Ну не 55-летней же. В тормоза на intel 8008 еще поверю.
Если быть точным. При сокращении "поедаемых объектов" наблюдается ускорение на глаз примерно на треть.
Соответственно имеем при полной наборе объектов, что работает не так.


Всем спасибо. Помог  статик-грид вместе с деревом расстояний. 

#14
23:41, 30 июля 2018

К чему было писать велосипед когда есть box2d или bullet phys ?

Страницы: 1 2 Следующая »
ПрограммированиеФорумФизика

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