Программирование на Python. Урок 10. Анимация и передвижение презентация

Содержание

Слайд 2

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

Слайд 3

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

Узнаем что такое вектор и зачем он нужен
Научимся

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

Программирование на Python | Анимация и передвижение

Слайд 4

Что такое вектор и зачем он нужен

Слайд 5

Что такое вектор

Программирование на Python | Анимация и передвижение

Вектор — это просто отрезок

с направлением. Нарисуйте на листе бумаге стрелку — это и есть вектор! Вы ясно видите где у него начало и где конец. Также понимаете куда он показывает. Если вы покрутите листок бумаги, то будет меняться направление стрелки (вектора).
Теперь понимаете зачем нужен вектор в играх? :) Верно! Одно из его назначений — это вращение объектов и определение их направления. Этим мы и займемся на этом уроке!

Слайд 6

Подключаем вектор к классам

Программирование на Python | Анимация и передвижение

Перейдем в класс игрока

и подключим модуль с вектором:

Перейдем в класс игрока и подключим модуль с вектором:
Цифра 2 говорит о том, что мы будем работать в 2-мерном пространстве. Данный модуль необходимо подключить ко всем классам, которые будут вращаться (это и игрок и все мобы).

Слайд 7

Подготовка для вращения

Слайд 8

Подключаем необходимые свойства

Программирование на Python | Анимация и передвижение

Одного вектора недостаточно. Чтобы осуществить

вращение, мы должны добавить нашим спрайтам еще несколько важных свойств. Сначала создадим копию нашей картинки:

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

Слайд 9

Подключаем необходимые свойства

Программирование на Python | Анимация и передвижение

Теперь нам важно создать вектор

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

Здесь мы создаем наш вектор и указываем центр рамки спрайта. В таком виде всё будет корректно располагаться и наш вектор как бы приклеивается ровно к центру рамки и будет одним целым с ней.

Слайд 10

Подключаем необходимые свойства

Программирование на Python | Анимация и передвижение

Далее указываем направление. Так как

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

В итоге у нас получится примерно вот такая ситуация:

Конечно же рамки спрайта и самого вектора не будет видно в игре. Но мы будем знать, что именно так они будут настроены.

Слайд 11

Подключаем необходимые свойства

Программирование на Python | Анимация и передвижение

Ещё один параметр,, который нам

необходимо добавить — это угол поворота. В начале он равен 0, так как наш спрайт в начале игры получается никуда не повернут:

Слайд 12

Подключаем необходимые свойства

Программирование на Python | Анимация и передвижение

И последний параметр, который нам

необходимо добавить — это скорость движения.
Мы делаем скорость 5, но если вам покажется, что этого мало – можете поддать газу!

На этом со свойствами закончили.
copy, position, direction и angle необходимо добавить всем классам врагов. Скорость добавлять не нужно, у них будут свои свойства для

Слайд 13


Функция для вращения

Слайд 14

Создаем функцию вращения

Программирование на Python | Анимация и передвижение

Вращение — это не самая

простая процедура в играх. Для неё нужна отдельная функция. Давайте создадим её для нашего класса игрока. Это будет та же конструкция, что и __init__ или update. Но внутри будет код, который будет вращать наш спрайт:
Соблюдая отступы на том же уровне что def других функция создадим новую:

Обратите внимание, что внутри rotate мы сначала указываем self (это требование ООП). А после можем указывать параметры, которые наша функция будет принимать. А принимать она будет один параметр, задающий скорость вращения спрайта. Мы будем указывать скорость при вызове данной функции.

Слайд 15

Направление взгляда

Программирование на Python | Анимация и передвижение

Внутри функции rotate начнем писать команды.

Вначале изменим направление взгляда (вращаем ту самую стрелку вектора)

Слайд 16

Изменяем угол поворота

Программирование на Python | Анимация и передвижение

Дальше мы узнаем на какой

угол повернулась стрелка и сохраним этот угол поворота в соответствующей переменной self.angle

Слайд 17

Поворот копии

Программирование на Python | Анимация и передвижение

Теперь, когда знаем угол, мы можем

повернуть наш спрайт. Но поворачиваем не сам спрайт, а копию картинки спрайта. И полученную развернутую копию уже записываем внутрь основной картинки:

Слайд 18

Получаем новую рамку и заканчиваем

Программирование на Python | Анимация и передвижение

После поворота картинки

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

Слайд 19


Включаем вращение

Слайд 20

Функция update()

Программирование на Python | Анимация и передвижение

Все действия для любых спрайтов должны

быть написаны внутри специальной функции update. Эта функция будет вызываться в игровом цикле. И весь код написанный внутри будет работать постоянно, пока работает игровой цикл. Давайте создадим эту функцию:

И внутри сразу напишем код, с помощью которого pygame сможет следить за нажатием клавиш:

Слайд 21

Вращение игрока

Программирование на Python | Анимация и передвижение

Теперь мы можем по нажатию клавиш

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

Как мы помним, функция принимает один параметр — скорость вращения. Так вот с помощью числа мы задаем скорость вращения. А знак «минус» может менять направление вращения. Отрегулируйте для себя удобную скорость вращения.

Слайд 22

Вращение мобов

Программирование на Python | Анимация и передвижение

У мобов все проще. Они должны

вращаться постоянно, поэтому просто внутри update будем вызывать функцию вращения. Можете сделать разные скорости и разные направления вращения разным мобам:

Слайд 23

Перерыв 10 мин

Слайд 24


Настраиваем движение

Слайд 25

Корректируем движение игрока

Программирование на Python | Анимация и передвижение

Наш игрок начал вращаться, но

по стрелкам вверх и вниз он двигается не в направлении взгляда, а просто вверх и вниз. Нужно это исправить. Чтобы двигаться в направлении движения, необходимо производить две операции:
Изменить позицию вектора
Переместить рамку спрайта на эту позицию

Слайд 26

Добавляем движение мобам

Программирование на Python | Анимация и передвижение

Для начала давайте возьмем один

из классов мобов EnemyLeft и добавим движения ему. Создадим свойства характеризующие его скорость. Здесь уже пригодятся два значения — скорость по вертикали и по горизонтали:

Для большего разнообразия мы делаем скорости случайными. Причем интервал разный. Так как левые мобы двигаются только вправо, то для скорости по горизонтали — это интервал только из положительных чисел (от 1 до 5). А вот по вертикали они могут двигаться как вверх так и вниз, поэтому интервал содержит в себе числа от -5 до 5.

Слайд 27

Добавляем движение мобам

Программирование на Python | Анимация и передвижение

Далее нам необходимо добавить в

функцию update, изменение положение спрайтов:

Теперь спрайт, находящийся слева начал двигаться!

Слайд 28

Респаун мобов

Программирование на Python | Анимация и передвижение

Возникла другая проблема — как только

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

Слайд 29

Респаун мобов

Программирование на Python | Анимация и передвижение

А внутри данного условия напишем логику

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

Слайд 30


Настраиваем движение остальным мобам

Слайд 31

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

Программирование на Python | Анимация и передвижение

Теперь вам предстоит самостоятельно настроить перемещение

и респаун остальным мобам. Чтобы вам было проще, вот всё что вам может пригодиться:
self.rect.x > width — условие проверки на пересечение правой границы
self.rect.right < 0 — условие проверки на пересечение левой границы
self.rect.y > height — условие проверки на пересечение нижней границы
self.rect.bottom < 0 — условие проверки на пересечение верхней границы
self.speedx = random.randint(1, 5) — движение вправо со случ. скоростью от 1 до 5
self.speedx = random.randint(-5, -1) — движение влево со случ. скоростью от 1 до 5
self.speedx = random.randint(-5, 5) — движение влево и вправо со случ. скоростью
self.speedy = random.randint(1, 5) — движение вниз со случ. скоростью от 1 до 5
self.speedy = random.randint(-5, -1) — движение вверх со случ. скоростью от 1 до 5
self.speedy = random.randint(-5, 5) — движение вверх и вниз со случ. скоростью

Слайд 32

Класс EnemyLeft

Программирование на Python | Анимация и передвижение

Слайд 33

Класс EnemyRight

Программирование на Python | Анимация и передвижение

Слайд 34

Класс EnemyBottom

Программирование на Python | Анимация и передвижение

Слайд 35

Класс EnemyTop

Программирование на Python | Анимация и передвижение

Слайд 36

Результат

Программирование на Python | Анимация и передвижение

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

здесь:
https://github.com/ronmount/gb_shooter/archive/refs/heads/lesson2.zip

Слайд 37

Итоги

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

игре
Научились перемещать игровые объекты в случайном направлении
Настроили правильное движение игрока
Настроили респаун мобов

Программирование на Python | Анимация и передвижение

Слайд 38

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

Реализуем стрельбу игрока
Настроим события столкновения всех объектов
Применим вектор для управления полетом

пули
Добавим взрывы

Программирование на Python | Анимация и передвижение

Слайд 39

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

Слайд 40

Что такое вектор?

Слайд 41

Какой интервал нужно задать, чтобы объект летел либо вверх либо вниз?

Слайд 42

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

скрылся за верхней границей экрана?

Слайд 43

Почему мы вызываем функцию rotate() у мобов внутри update, а у игрока только

при нажатии кнопок?

Слайд 44

Ваши вопросы

Слайд 45

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

Слайд 46

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

Слайд 47

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

Имя файла: Программирование-на-Python.-Урок-10.-Анимация-и-передвижение.pptx
Количество просмотров: 7
Количество скачиваний: 0