- Непрерывное движение объекта в Pygame вдоль осей X, Y и по диагонали
- Исходные данные
- Что будем делать?
- Общий принцип непрерывного движения в Pygame на примере движения вдоль оси X
- Код непрерывного движения объекта в Pygame по горизонтали:
- Непрерывное движение объекта в Pygame вдоль оси Y
- Код непрерывного движения объекта в Pygame по вертикали
- Полученный результат:
- Непрерывное движение объекта по диагонали в Pygame
- Код непрерывного движения объекта в Pygame по диагонали
- Библиотека Pygame / Часть 2. Работа со спрайтами
- Что такое спрайт?
- Создание спрайта
- Движение спрайта
- Код урока:
- PyGame Основы часть 3. Анимация и события
- Как сделать анимацию в PyGame:
- Обработка событий в PyGame:
- Вывод:
- 🌟 Видео
Видео:Как Работать с Физикой на Python. Доска Гальтона [ Pygame + Pymunk ]Скачать
Непрерывное движение объекта в Pygame вдоль осей X, Y и по диагонали
Как показывает практика, движение — это жизнь! Поэтому сегодня мы вдохнем жизнь в сотворенный посредством Pygame объект и научим его двигаться без учета сигналов с клавиатуры! Для начала мы рассмотрим движение объекта в Pygame по прямой вдоль оси X, затем развернем объект и зададим ему движение вдоль оси Y, и в заключение — оформим диагональное перемещение объекта. Однако сначала предлагаю взглянуть на исходный код.
Исходные данные
Давайте взглянем на исходный код: у нас имеется экран csreen шириной 500px и высотой 300px, а также изображение мыши «mouse.png», расположенное на экране по заданным координатам: mouseX = 0, mouseY = 200:
При запуске кода мы увидим в левом нижнем углу экрана притаившуюся мышку с повернутой вправо мордочкой:
Что будем делать?
Необходимо научить мышку двигаться непрерывно:
- по горизонтали вдоль оси Х
- по вертикали вдоль оси Y
- по диагонали из левого нижнего угла в правый верхний угол
Общий принцип непрерывного движения в Pygame на примере движения вдоль оси X
В настоящий момент для вывода изображения мышки на экран мы используем цикл while (while True: ..) . То есть пока открыто игровое поле, мы осуществляем вывод изображения на экран в цикле по заданным координатам через каждые 30 мс (что определено строкой pygame.time.delay(30)).
В одной секунде содержится 1000 миллисекунд
Так как под движением в Pygame подразумевается перемещение объекта на заданную позицию через определенный промежуток времени, то для смещения мыши на 5px каждые 30 мс, нужно в цикле while увеличивать значение координаты X на 5px. Для этого добавим в исходный код всего 2 строчки: строку с определением переменной скорости speed, в которой будем хранить заданное смещение 5px расположим перед циклом while; а строку, задающее смещение изображение: mouseX += speed расположим в теле цикла while. В итоге получим зеленую поляну с мышкой, бегущей по горизонтальной прямой:
Код непрерывного движения объекта в Pygame по горизонтали:
Непрерывное движение объекта в Pygame вдоль оси Y
Для наглядности, сдвинем начальную позицию мышки ближе к центру, переопределив переменные стартовой позиции, как mouseX=200 и mouseY=200.
В соответствии с описанным выше принципом, зададим объекту движение по горизонтали, только изменять будем координату mouseY. В связи с тем, что точка с нулевыми координатами в Pygame располагается в верхнем левом углу поля, то при движении объекта вверх, значение координаты Y будет уменьшаться на заданное в переменной speed значение: Y -= speed. Однако, прежде чем мы добавим эту строчку в цикл while, предлагаю развернуть нашу мышку мордочкой вправо(т.е. на 90 градусов) с помощью функции pygame.transform.rotate(mouse, 90):
Код непрерывного движения объекта в Pygame по вертикали
Полученный результат:
Непрерывное движение объекта по диагонали в Pygame
При движении объекта по диагонали происходит одновременное смещение как по оси X, так и по оси Y, поэтому добавим в цикл while строки с изменением значений этих координат. Так как мы планируем движение мыши из левого нижнего угла в правый верхний угол прямоугольного экрана, то:
1. Сначала повернем мышь так, чтобы ее мордочка смотрела по направлению движения. Для этого используем функцию pygame.transform.rotate(mouse, 30).
2. Затем подкорректируем стартовую позицию объекта, чтобы повернутое изображение «выезжало» точно из левого нижнего угла: moveX=-13, moveY=218.
3. После этого, в цикле while зададим смещение по оси Х на величину speed: mouseX += speed. Кроме того, определим смещение по оси Y: так как размер игровой сцены 500×300, то при движении к правому верхнему углу поля, смещение мыши по оси Y должно быть меньше горизонтального смещения примерно в 300/500 или в 3/5 раз. Таким образом, определим смещение по Y, как: mouseY -= 3/5*speed.
Посмотрим, как будет выглядеть код после внесенных в него изменений:
Код непрерывного движения объекта в Pygame по диагонали
А теперь посмотрим на получившийся результат:
Видео:Игра на Pygame с нуля / Урок #5 – Передвижение и прыжокСкачать
Библиотека Pygame / Часть 2. Работа со спрайтами
Вторая часть серии руководств «Разработка игр с помощью Pygame». Она предназначена для программистов начального и среднего уровней, которые заинтересованы в создании игр и улучшении собственных навыков кодирования на Python. Начать стоит с урока: «Библиотека Pygame / Часть 1. Введение».
Видео:ПРОСТАЯ PYGAME ИГРА НА PYTHON. ДВИЖЕНИЕ ИГРОКА, БОТ, МЯЧСкачать
Что такое спрайт?
Спрайт — это элемент компьютерной графики, представляющий объект на экране, который может двигаться. В двухмерной игре все, что вы видите на экране, является спрайтами. Спрайты можно анимировать, заставлять их взаимодействовать между собой или передавать управление ими игроку.
Для загрузки и отрисовки спрайтов в случай этой игры их нужно добавить в разделы “Обновление” и “Визуализация” игрового цикла. Несложно представить, что если в игре много спрайтов, то цикл довольно быстро станет большим и запутанным. В Pygame для этого есть решение: группировка спрайтов.
Набор спрайтов — это коллекция спрайтов, которые могут отображаться одновременно. Вот как нужно создавать группу спрайтов в игре:
Теперь этой возможностью можно воспользоваться, добавив группу целиком в цикл:
Теперь при создании каждого спрайта, главное убедиться, что он добавлен в группу all_sprites . Такой спрайт будет автоматически отрисован на экране и обновляться в цикле.
Видео:#PYTHON# ДВИЖЕНИЕ КУБИКА НА PYGAMEСкачать
Создание спрайта
Можно переходить к созданию первого спрайта. В Pygame все спрайты выступают объектами. Если вы не работали с этим типом данных в Python, то для начала достаточно знать, что это удобный способ группировки данных и кода в единую сущность. Поначалу это может путать, но спрайты Pygame — отличная возможность попрактиковаться в работе с объектами и понять, как они работают.
Начнем с определения нового спрайта:
class сообщает Python, что определяется новый объект, который будет спрайтом игрока. Его тип pygame.sprite.Sprite . Это значит, что он будет основан на заранее определенном в Pygame классе Sprite .
Первое, что нужно в определении class — специальная функция __init__() , включающая код, который будет запущен при создании нового объекта этого типа. Также у каждого спрайта в Pygame должно быть два свойства: image и rect .
Первая строка, Pygame.sprite.Sprite.__init__(self) требуется в Pygame — она запускает инициализатор встроенных классов Sprite . Далее необходимо определить свойство image . Сейчас просто создадим квадрат размером 50х50 и заполним его зеленым ( GREEN ) цветом. Чуть позже вы узнаете, как сделать image спрайта красивее, используя, например, персонажа или космический корабль, но сейчас достаточно сплошного квадрата.
Дальше необходимо определить rect спрайта. Это сокращенное от rectangle (прямоугольник). Прямоугольники повсеместно используются в Pygame для отслеживания координат объектов. Команда get_rect() оценивает изображение image и высчитывает прямоугольник, способный окружить его.
rect можно использовать для размещения спрайта в любом месте. Начнем с создания спрайта по центру:
Теперь, после определения спрайта игрока Player, нужно отрисовать (создать) его, инициализировав экземпляр (instance) класса Player. Также нужно обязательно добавить спрайт в группу all_sprites .
Сейчас, если запустить программу, по центру окна будет находиться зеленый квадрат. Увеличьте значения WIDTH и HEIGHT в настройках программы, чтобы создать достаточно пространства для движения спрайта в следующем шаге.
Видео:Игра на PYGAME с нуля. Урок 2 - Объекты и движениеСкачать
Движение спрайта
В игровом цикле есть функция all_sprites.update() . Это значит, что для каждого спрайта в группе Pygame ищет функцию update() и запускает ее. Чтобы спрайт двигался, нужно определить его правила обновления:
Это значит, что при каждом игровом цикле x-координата спрайта будет увеличиваться на 5 пикселей. Запустите программу, чтобы посмотреть, как он скрывается за пределами экрана, достигая правой стороны.
Исправить это можно, заставив спрайт двигаться по кругу — когда он добирается до правой стороны экрана, просто переносить его влево. Это легко сделать, используя элемент управления rect спрайта:
Так, если левая сторона rect пропадает с экрана, просто задаем значение правого края равное 0:
Теперь можно видеть, как спрайт будто бы двигается по кругу.
На этом все. Отправляйтесь изучать и экспериментировать, но не забывайте, что все, что вы помещаете в метод update() , будет происходить в каждом кадре. Попробуйте научить спрайт двигаться сверху вниз (изменив координату y ) или заставить его отталкиваться от стен (изменяя направлении по достижении края).
Видео:Разработка игр на Python 3 с PyGame / #2 - Движение игрокаСкачать
Код урока:
В следующем уроке речь пойдет о том, как использовать арт в спрайтах — перейти от обычного квадрата к анимированному персонажу.
Видео:Третья часть: Разработка игры "Asteroids" на языке Python. Векторы и движение!!!Скачать
PyGame Основы часть 3. Анимация и события
В этой статье мы разберём как происходит анимация в PyGame и также не много затроним работу с события ми в библиотеки.
Также перед прочтением этой стать, рекомендую прочитать предыдущие, чтобы лучше понимать здесь написанное:
Видео:Создание персонажа: привязка к клавиатуры и добавление анимации на языке PythonСкачать
Как сделать анимацию в PyGame:
Для начала, чтобы всё наиболее наглядно показать, сделаем несколько переменных, вот они:
Как вы видите, в начале мы сделали переменные для назначения позиции по осям X и Y, потом назначили скорость при которой будет у нас перемешаться объект.
Также назначили ширину и высоту окна, это для удобства, так как он нам ещё пригодиться, создали окно и назначили таймер, он нам пригодиться для назначения FPS.
Вот основной код программы:
Как видите в начале мы назначаем FPS, потом весь экран заливаем чёрным цветом, это нужно, так как суть анимации будет в том, что мы весь экран заливаем чёрным и потом рисуем объект с новой позицией, тем самым он перемешается.
Потом идёт несколько условий, зависимо от него, мы будем увеличивать или уменьшать определённую переменную которая отвечает за позицию. Условия таковы, что круг у нас будет двигаться по часовой стрелки, по квадратному пути и он должен быть не ближе к краям окна чем на 50 пикселей.
Потом создаём шар, как это делать вы узнает ев прошлой части, также переменную для цвета назначали тоже в прошлой.
Потом идёт проверка событий, у нас она пока отвечает только за закрытие программы, но об этом ниже.
Последние обновляем весь экран, или всё прорисовываем, теперь запускаем программу и шар должен перемешаться как показано ниже:
Если у вас всё работает так же, то значит всё сделано правильно. Как вы наверное уже поняли, суть создания анимации, что мы просто меняем параметр объекта и всё перерисовываем заново, не забыв перед этим всё стереть.
Видео:Камера - Изучение Pygame - Часть 9Скачать
Обработка событий в PyGame:
Чтобы показать более наглядно обработчик событий в PyGame, немного изменю основной код программы, который был показан выше.
Как видите мы убрали условия и рендеринг шара поставили в низ, перед обновлением экрана.
Для обработки событий мы используем цикл for , который проходиться по pygame.event.get() , эта функция возвращает словарь данных о событие которое происходит прямо сейчас.
Внутри цикла мы уже используем одно условие для проверки выхода из программы/игры, это pygame.QUIT , внутри условия мы выходим из программы.
Параметр type , словаря event хранит тип события, поэтому если нужно проверить тип, проверяем его.
Следующие условие проверяет нажатие клавиш на клавиатуре, внутри есть ещё условия, которые проверяют какая конкретна была нажата клавиша, параметр key , словаря event хранит номер клавиши.
В этих условиях мы проверяем, что были нажаты именно стрелки, и как видите, при нажатие стрелок мы меняем координаты нашего шара.
Это вот кратко как обрабатывать событие, то есть, вам нужен цикл который проходиться по словарю который хранит данные о событие, который возвращает метод pygame.event.get() , и параметр этого словаря type , он хранит тип события.
Видео:Что такое спрайты и как с ними работать | Pygame #9Скачать
Вывод:
В этой статье вы прочитали про как происходит анимация в PyGame, и немного узнали про работу с событиями. Эта была заключительная часть из цикла статей, про основы PyGame, этих знаний должно хватить, чтобы сделать простую игру.
🌟 Видео
Создаем игру на Python & Pygame! (4 часть): Добавляем анимацию движенияСкачать
Простая анимация на питоне #программирование #pythonСкачать
Как сделать эффекты в игре | Система частиц на Python и PyGameСкачать
#Pygame Урок 2.11 Движение во все стороныСкачать
Как создать игровое поле для своей игры Pygame. Клеточное поле, Поле в клеткуСкачать
Передвижение заднего фона игры. Самый простой способ прокрутки камеры. (Python. Pygame)Скачать
Как делать контроль столкновений | Pygame #10Скачать