Задать вопрос

Как сделать коллизию между гранатой и полом в pygame?

Я хочу сделать гранату в игре но, не знаю как сделать чтобы она оставалась на блоках.
использую python с библиотекой pygame
61dbf7b4ce12e663721851.png
  • Вопрос задан
  • 240 просмотров
Подписаться 2 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fallervood
@Fallervood
Коллизия должна быть не между, а на полу и на гранате..
Ответ написан
TalismanChet
@TalismanChet
Лицо зла
Давайте представим ситуацию: изображение гранаты перекрыло изображение земли:

Пусть Rect земли = Rect(0, 90, 100, 10) с окном 100х100рх

Случай 1.

Пусть х и у гранаты хранятся отдельно.
Тогда нужно создать новый Rect с координатами гранаты и размером желаемого хитбокса. Если включить отрисовку такого Rect'а, то можно увидеть такую картину:

6224b13196b27565859800.png

То есть, это и есть хитбокс гранаты.

Далее мы должны взять каждую точку хитбокса на картинке (это хорошо работает с маленькими целевыми и большими проверяющими хитбоксами, если бы земля была маленькой, а граната - огромной, то проверку нужно было бы делать и от земли к гранате и от гранаты к земле) и сравнить перекрывание с хитбоксом земли:
groundRect.collidepoint(granadeRectPoint)
# True если перекрывается

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

Случай 2.

Пусть х и у гранаты равны х и у изображения.
Тогда нужно извлечь Rect с координатами гранаты из изображения:

granadeRect = granadeImage.get_rect()

Если включить отрисовку такого Rect'а, то можно увидеть такую картину:

6224b13196b27565859800.png

То есть, это и есть хитбокс гранаты.

Далее мы должны взять каждую точку хитбокса на картинке (это хорошо работает с маленькими целевыми и большими проверяющими хитбоксами, если бы земля была маленькой, а граната - огромной, то проверку нужно было бы делать и от земли к гранате и от гранаты к земле) и сравнить перекрывание с хитбоксом земли:
groundRect.collidepoint(granadeRectPoint)
# True если перекрывается

А далее можно производить требуемые действия, например, уничтожить экземпляр гранаты или обнулить её вектор движения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы