Я бы сказал, что использование одного «хитбокса» для элемента J невозможно. Вот почему у вас есть pygame, обнаруживающий попадание с двумя коробками, которых там нет.
Это почему?
Потому что «хитбокс» — это один прямоугольник. Этот прямоугольник имеет свою высоту и ширину, и он соответствует высоте и ширине элемента J. Все внутри этого прямоугольника является частью одного и того же «хитбокса». На самом деле не имеет значения, имеет ли изображение, представляющее этот элемент, прозрачную часть или нет.
Hitbox основан не на изображении и его прозрачных частях, а на прямоугольнике, окружающем изображение.
Вот почему у вас должно быть как минимум 2 прямоугольника, которые покроют обе части элемента J, т.е. 3 вертикальных квадрата и 2 горизонтальных. Это немного усложняет все дело. Но вы должны иметь возможность использовать дочерний subsurfaces
и использовать обнаружение столкновений для них обоих.
Я бы также сказал, что для этой цели вообще не рекомендуется использовать обнаружение столкновений pygame. Лучшим подходом было бы то, что вы делаете это, используя 2D-матрицу, где вы сохраняете «O» для пустого квадрата и «X» для занятого. На каждом шаге у вас есть элемент в координатах X, Y, и вы проверяете, опускаете ли вы его на 1 шаг, вы сталкиваетесь с занятым пространством в матрице. Хотя это всего лишь предложение.
Пример чистой матрицы 5 строк x 4 столбца:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Пример элемента J в координате (1, 1):
0 0 0 0
0 0 J 0
0 0 J 0
0 J J 0
0 0 0 0
Обратите внимание, что система координат pygame имеет координату (0,0) в левом верхнем углу экрана. Это соответствует координатам сгенерированной 2D-матрицы.
person
Ilija
schedule
25.02.2018