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

Содержание

Слайд 2

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

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

Слайд 3

Что будет на уроке сегодня? Добавим спрайт пули в игру

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

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

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

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

Слайд 4

Спрайт пули

Спрайт пули

Слайд 5

Класс пули Программирование на Python | Взаимодействие объектов Начало точно

Класс пули

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

Начало точно такое же, как

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

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

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

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

Далее нам необходимо сразу же

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

Необходимые свойства Программирование на Python | Взаимодействие объектов После поворота,

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

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

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

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

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

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

Слайд 8

Полет пули Программирование на Python | Взаимодействие объектов Наша пуля

Полет пули

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

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

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

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

Слайд 9

Финальный вид файла с классом пули: Программирование на Python | Взаимодействие объектов

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

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

Слайд 10

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

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

Слайд 11

Клавиша стрельбы Программирование на Python | Взаимодействие объектов Теперь, когда

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

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

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

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

Создаем пулю Программирование на Python | Взаимодействие объектов Чуть ниже

Создаем пулю

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

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

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

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

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

Слайд 14

Группы для всех спрайтов Программирование на Python | Взаимодействие объектов

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

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

Мы уже с

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

Добавляем спрайты в группы Программирование на Python | Взаимодействие объектов

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

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

А теперь, нам

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

Добавляем спрайты в группы Программирование на Python | Взаимодействие объектов

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

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

И не забудем

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

Уничтожение спрайтов Программирование на Python | Взаимодействие объектов Групповые коллизии

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

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

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

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

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

Слайд 18

Перерыв 10 мин

Перерыв 10 мин

Слайд 19

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

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

Слайд 20

Загружаем звуки в класс игрока Программирование на Python | Взаимодействие

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

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

Для начала

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

Звук выстрела Программирование на Python | Взаимодействие объектов Теперь просто

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

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

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

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

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

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

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

Сначала нам

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

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

Слайд 23

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

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

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

Нам

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

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

Слайд 24

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

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

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

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

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

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

Слайд 25

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

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

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

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

цикла уже известным нам способом
Слайд 26

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

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

Слайд 27

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

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

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

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

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

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

Подсказка

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

Сначала идем во все классы мобов

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

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

Готово!

Слайд 29

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

Результат

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

Весь проект с готовыми файлами можно

скачать здесь:
https://github.com/ronmount/gb_shooter/archive/refs/heads/lesson3.zip
Слайд 30

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

Итоги

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

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

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

Слайд 31

На следующем занятии: Добавим жизни игроку и мобам Добавим анимацию

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

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

Программирование на Python

| Взаимодействие объектов
Слайд 32

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

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

Слайд 33

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

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

Слайд 34

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

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

Слайд 35

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

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

Слайд 36

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

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

Слайд 37

Ваши вопросы

Ваши вопросы

Слайд 38

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

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

Слайд 39

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

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

Слайд 40

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

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

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