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

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

Я хочу сделать гранату в игре но, не знаю как сделать чтобы она оставалась на блоках.
использую python с библиотекой pygame
61dbf7b4ce12e663721851.png
  • Вопрос задан
  • 244 просмотра
Подписаться 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 если перекрывается

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

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽