Каков наилучший способ обнаружения столкновений с байтовым массивом рельефа - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть многомерный байтовый массив (x, y, z), который описывает ландшафт в моей игре, например, если байт имеет значение 0, то это воздух (проходимый ландшафт), а если значение 4, то это камень ( solid block).

Теперь я начинаю кодировать движение моего персонажа, просматривая ячейку, в которую хочу переместиться, и позволяю движение, если ячейка имеет значение 0, и предотвращаю перемещение, если оно равно 4.

Однако я столкнулся с проблемой, заключающейся в том, что некоторые из моих персонажей шире 1 ячейки, поэтому для персонажа шириной 3х3 я должен проверить наличие столкновений с массивом в 9 точках. каждый раз, когда я хочу переместить персонажа (я пытался проверить только 4 угла, но он позволял персонажу go через блоки 1x1, так как центр персонажа больше не проверялся на столкновения)

Однако проблема идет глубже, так как теперь я также должен проверить высоту, мне нужно проверить, есть ли у персонажа 3x3x3 27 очков, и мне нужно было go еще больше, так как некоторые существо они будут довольно большими, мне нужно, чтобы они были 5x5x5, чтобы в общей сложности 125 точек сравнивались в каждом кадре, когда персонаж двигается, и мне также нужно, чтобы на экране одновременно было достаточно много символов.

Теперь я легко обнаруживаю столкновение между персонажами, используя Bounds.Intersects, однако столкновения с ландшафтом выглядят довольно грязно, мне действительно нужно вычислять 125 точек на кадр относительно массива ландшафта или есть лучший способ?

...