1 голос
 
1065 просмотров
17.12.2017 / 08:30  Death

Столкновение с треугольниками

Нужно проверить столкновение с прямоугольными треугольниками.
На каждый вид, отдельный метод проверки, нужно возвращать true, когда сталкивается и нужно получить высоту и длину от прямого угла до точки столкновения.

:ps: Достаточно будет и одного true возвращающего метода для каждого вида.

CollisionDiagonal.png (5.71 кб.)
Ответы
 
4 голоса
 
# 17.12.2017 / 11:56  RblSb
Возьмем точку столкновения игрока относительно корд квадрата с красным треугольником. Если ее x или y больше размера тайла, то происходит столкновение. Если x и y больше половины тайла - тоже. Следовательно, если x и у точки в сумме больше размера тайла, произойдет коллизия.
  1. //tile.x/y должны быть определены в широкой фазе проверкой по сетке
  2. //или же использовать point.x%tsize и point.y%tsize, если точно уверены, что точка в пределах тайла
  3. return point.x - tile.x * tsize + point.y - tile.y * tsize > tsize;
Для тайла отраженного по горизонтали видно, что столкновение произойдет при любом x < y:
  1. return point.x - tile.x * tsize < point.y - tile.y * tsize;
Для остальных двух треугольников просто обратное значение этих выражений.
Изм. RblSb от 17.12.2017 / 11:59
 
0 голосов
 
# 17.12.2017 / 08:55  Magatino
Смотря где это нужно, в платформерах, например это можно делать по ячейкам или по альфу каналу, либо по ячейкам определять фигуру, а само столкновение определять в соответствии с фигурой.
Примерно вот так для прямоугольника, а остальные фигуры легко гуглятся.
  1. public boolean iCollisionRect() {
  2. if (x >= rect_x && x <= rect_x + rect_width)
  3.     if (y >= rect_y && y <= rect_y + rect_height)
  4.        return true;
  5.  
  6. return false;
  7. }
Изм. Magatino от 17.12.2017 / 08:56
Всего: 2

Реклама

Мы в соцсетях

tw tg yt gt