Программирование на Python. Урок 11. Взаимодействие объектов презентация

Содержание

Слайд 2

Немного повторим прошлый урок

Слайд 3

Что будет на уроке сегодня?

Добавим спрайт пули в игру
Научимся перемещать пулю в

нужном направлении
Настроим взаимодействие и уничтожение мобов пулями
Добавим правильные звуки в событиях столкновения

Программирование на Python | Взаимодействие объектов

Слайд 4

Спрайт пули

Слайд 5

Класс пули

Программирование на Python | Взаимодействие объектов

Начало точно такое же, как и все

остальные, можно просто скопировать первые строки кода из класса игрока, изменив только картинку:

Слайд 6

Угол поворота

Программирование на Python | Взаимодействие объектов

Далее нам необходимо сразу же повернуть пулю

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

Слайд 7

Необходимые свойства

Программирование на Python | Взаимодействие объектов

После поворота, нам сразу необходимо будет перенести

пулю в ту же позицию что и игрок:

Затем определить её скорость полета:

И направление её движения в том же направлении, что и игрок:

Слайд 8

Полет пули

Программирование на Python | Взаимодействие объектов

Наша пуля должна двигаться постоянно в указанном

направлении. Чтобы это было возможно мы должны создать функцию def update(self) и в ней достаточно будет добавить всего одну команду перемещения:

И еще один момент, о котором нужно позаботиться — это уничтожение пули при её вылете за пределы экрана. Как определить, что пуля оказалась за пределами мы уже знаем. Давайте напишем одну проверку, которая объединит сразу все условия. И если проверка будет выполнена, то мы уничтожим пулю специальной командой:

Слайд 9

Финальный вид файла с классом пули:

Программирование на Python | Взаимодействие объектов

Слайд 10

Учимся стрелять

Слайд 11

Клавиша стрельбы

Программирование на Python | Взаимодействие объектов

Теперь, когда наш спрайт полностью настроен, можно

его добавить на экран. Для этого сначала настроим событие, по которому игрок будет стрелять. Переходим в основной файл игры и добавляем в игровой цикл отслеживание нажатия клавиш:

Слайд 12

Создаем пулю

Программирование на Python | Взаимодействие объектов

Чуть ниже проверяем нажат ли пробел. И

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

Слайд 13

Групповые коллизии

Слайд 14

Группы для всех спрайтов

Программирование на Python | Взаимодействие объектов

Мы уже с вами создавали

группу для абсолютно всех спрайтов и добавляли туда всех подряд. Но теперь нам нужно еще дополнительно распределить наши спрайты по своим группам, чтобы мы могли отличить мобов от игрока и других объектов. Для этого просто переходим в то место, где у нас создавалась наша самая первая группа и добавим еще группы для мобов, для игроков:

Слайд 15

Добавляем спрайты в группы

Программирование на Python | Взаимодействие объектов

А теперь, нам нужно не

забыть добавить все когда либо создаваемые спрайты в эти группы. Начнем с игрока и мобов:

Слайд 16

Добавляем спрайты в группы

Программирование на Python | Взаимодействие объектов

И не забудем про пули.

Вспомним где они у нас создавались и допишем там еще одну команду для добавления в нужную группу:

Слайд 17

Уничтожение спрайтов

Программирование на Python | Взаимодействие объектов

Групповые коллизии — это события, которые необходимо

постоянно проверять в игровом цикле. Поэтому перемещаемся внутрь него и пишем следующую команду:

shots — это просто переменная, которая хранит в себе информацию о столкновении.
pygame.sprite.groupcollide() — это функция, которая нужна для настройки столкновений
bullets_sprites — первая группа спрайтов за которой следим
mobs_sprites — вторая группа спрайтов за которой следим
True, True — это признаки того нужно ли удалить спрайт после столкновения. Первый True — означает, что удаляем спрайт их первой группы (в нашем случае — это пули). Второй True — означает, что удаляем спрайт из второй группы (в нашем случае — это мобы).

Слайд 18

Перерыв 10 мин

Слайд 19

Добавляем звуки и музыку

Слайд 20

Загружаем звуки в класс игрока

Программирование на Python | Взаимодействие объектов

Для начала просто загрузим

все свойства в класс игрока. У нас будут:
Звук выстрела
Звук взрыва
Звук скрежета
И сразу уменьшим громкость

Слайд 21

Звук выстрела

Программирование на Python | Взаимодействие объектов

Теперь просто найдем событие выстрела в игровом

цикле и добавим туда звук выстрела:

Слайд 22

События столкновения мобов и игроков

Программирование на Python | Взаимодействие объектов

Сначала нам нужно запрограммировать

столкновения игрока и мобов. Перейдем в игровой цикл и воспользуемся уже известным нам способом:

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

Слайд 23

Функция для возврата спрайта из группы

Программирование на Python | Взаимодействие объектов

Нам нужно будет

среди группы игроков найти одного нашего, чтобы можно было у него воспроизвести звук скрежета. Для этого сначала добавим функцию для поиска этого объекта:

Это готовая функция, мы её просто добавим до игрового цикла. А дальше можем ею воспользоваться, чтобы получить тот самый один спрайт и сделать с ним все, что захотим. В нашем случае пока что только воспроизвести звук скрежета.

Слайд 24

Звук скрежета

Программирование на Python | Взаимодействие объектов

Первым делом добавим условие проверки события столкновения.

И если это событие произошло, то получим спрайт из группы игроков с которым столкнулся моб и воспроизведем его звук:

Важно! Функция get_hit_sprite() получает спрайт только из второй группы, указанной в событии groupcollide(). Так как мы хотим получать игрока с которым столкнулся моб, то группу игроков мы ставим на второе место. Также указываем False и False, чтобы спрайты не исчезали при столкновении.

Слайд 25

Фоновая музыка

Программирование на Python | Взаимодействие объектов

Фоновая музыка добавляется до игрового цикла уже

известным нам способом

Слайд 26

Добавляем звуки взрыва

Слайд 27

Самостоятельная работа

Программирование на Python | Взаимодействие объектов

Сейчас вам самостоятельно предстоит добавить звуки взрыва

ко всем классам мобов. И воспроизвести их в момент столкновения пули и мобов (добавить похожий код как для scratch) только для события shots.
Подсказка есть ниже но попробуйте сделать самостоятельно.

Слайд 28

Подсказка

Программирование на Python | Взаимодействие объектов

Сначала идем во все классы мобов и загружаем

в них звуки взрыва, делая сразу потише.

Затем в игровом цикле добавляем для события shots соответствующую обработку:

Готово!

Слайд 29

Результат

Программирование на Python | Взаимодействие объектов

Весь проект с готовыми файлами можно скачать здесь:
https://github.com/ronmount/gb_shooter/archive/refs/heads/lesson3.zip

Слайд 30

Итоги

Изучили принципы создания спрайтов в определенный момент
Настроили постоянное движение спрайта в указанном направлении
Узнали

что такое групповые коллизии и как их настраивать
Настроили стрельбу игрока
Настроили уничтожение мобов при попадании
Включили звуки в нужных событиях и добавили музыку

Программирование на Python | Взаимодействие объектов

Слайд 31

На следующем занятии:

Добавим жизни игроку и мобам
Добавим анимацию взрыва

Программирование на Python | Взаимодействие

объектов

Слайд 32

Немного повторим

Слайд 33

Как можно проверить выход спрайта за границы экрана в одном условии?

Слайд 34

Для чего нужен self.kill() ?

Слайд 35

Для чего нужны групповые коллизии?

Слайд 36

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

Слайд 37

Ваши вопросы

Слайд 38

Спасибо за внимание

Слайд 39

Домашнее задание

Слайд 40

Заполни, пожалуйста, форму обратной связи по уроку

Имя файла: Программирование-на-Python.-Урок-11.-Взаимодействие-объектов.pptx
Количество просмотров: 5
Количество скачиваний: 0