Перейти к содержимому

Как вставить картинку в pygame

  • автор:

Картинки на выставку (часть 1)

Система управления версиями (CVS) — один из основных инструментов программиста. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое.

Git — одна из самых популярных систем контроля версиями (CVS). Автор git — Линус Торвальдс.

GitHub — крупнейший веб-сервис для хостинга IT-проектов и их совместной разработки.

Упражнение 1. Git

Пройдите туториал и продемонстрируйте преподавателю тестовый репозиторий на гитхабе.

1. Зарегистрируйтесь на github.com с некоторым именем пользователя, например Ivanov (тут и далее вместо Ivanov нужно подставлять имя вашего пользователя, а вместо ivanov.ivan@someuniversity.edu вашу настоящую почту).

  1. Создаем новый репозиторий https://github.com/new (или значок + в правом верхнем углу):
    • В качестве имени репозитория задаем infa_2020_ivanov
    • Доступ оставляем Public
    • Не забываем поставить галочку «Initialize this repository with a README»

3. Откройте терминал (консоль) GNU/Linux или командную строку Git-bash под M$ Windows. Теперь git clone — склонируем получившийся репозиторий на свой компьютер и зайдем в папку с репозиторием:

$ git clone https://github.com/Ivanov/infa_2020_ivanov Cloning into 'infa_2020_ivanov'. remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. $ ls infa_2020_ivanov $ cd infa_2020_ivanov $ ls README.md

Не забудем сконфигурить гит, представившись ему (это обязательно нужно сделать находясь в папке infa_2020_ivanov ):

git config user.name "Ivanov Ivan" git config user.email ivanov.ivan@someuniversity.edu

Почту указываем как при регистрации.

4. Теперь у нас локально есть полная и независимая версия нашего репозитория infa_2020_ivanov . Она никак явным образом не связана с версией на серверах github’а, однако в гите существуют инструменты для обмена данными между разными репозиториями. Иными словами, git — это распределенная система управлениями версиями.

  1. Команда git log возвращает историю нашего репозитория. В данный момент в нашей истории ровно один коммит (коммит — это некоторый набор изменений).
-> git log commit eec733a21cerfb66973991a9357aab735fa40ba4 Author: Ivanov Date: Wed Sep 16 12:06:08 2020 +0300 Initial commit

6. Давайте отредактируем файл README.md и добавим в него что-нибудь. Откроем файл README.md и напишем в нем что-нибудь. После с помощью git diff посмотрим на текущие изменения. В «диффе» видно, что была добавлена строчка «it’s test project».

-> git diff diff --git a/README.md b/README.md index 21e60f8..285eafa 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# infa_2020_ivanov \ No newline at end of file +# infa_2020_ivanov + +it\'s test project

7. Команда git status показывает текущий статус репозитория. Мы видим, что сейчас мы находимся в ветке master (основная ветка нашего репозитория). Ниже написано, что файл README.md был изменен. Однако он ещё не готов для коммита.

-> git status # On branch master # Changes not staged for commit: # (use "git add . " to update what will be committed) # (use "git checkout -- . " to discard changes in working directory) # # modified: README.md # no changes added to commit (use "git add" and/or "git commit -a") 
  1. Сделаем git add, как рекомендует нам команда status.
-> git add README.md -> git status # On branch master # Changes to be committed: # (use "git reset HEAD . " to unstage) # # modified: README.md # 

Теперь git status показывает, что изменения в файле README.md готовы для коммита. Если сейчас снова измененить README.md , то нужно снова обязательно выполнить git add.

  1. git-commit — закоммитим наши изменения, то есть внесём «квант» изменений в историю развития проекта:
$ git commit -m "Added something to README" [master 274f6d5] Added something to README Committer: Ivanov Ivan 1 file changed, 3 insertions(+), 1 deletion(-) 
  1. Снова посмотрим (git log) на историю нашего репозитория:
$ git log commit 8e2642d512b11ae43a97b0b4ac68e802d2626f14 Author: Ivanov Ivan Date: Wed Nov 9 14:47:40 2016 +0300 Added something to README commit eec733a21cerfb66973998a9327aab735fa40ba4 Author: Ivanov Ivan Date: Wed Nov 9 13:36:38 2016 +0300 Initial commit

Теперь в нашем репозитории два коммита.

  1. Давайте сделаем git push — отправим («запушим» на сленге программистов) наши изменения в оригинальный репозиторий на github.com.
$ git push Username for 'https://github.com': Password for 'https://ivanov@github.com': To https://github.com/Ivanov/infa_2020_ivanov eec733a..8e2642d master -> master

При git push необходимо будет ввести логин и пароль на GitHub (если, конечно, вы не настроили ssh-аутентификацию :-)). Теперь изменения будут доступны для всех.

  1. Существует парная команда git pull — которая забирает изменения с оригинального репозитория на сервере.
$ git pull Already up-to-date.

Создание картинок с библиотекой Pygame.draw

На этом занятии вы будете рисовать графические объекты на языке Python.

Откройте папку со своим репозиторием infa_2020_ivanov , который вы создали в GitHub и склонировали на локальный компьютер.

Создайте в нём вложенную папку lab3 . Все файлы этой лабораторной работы сохраняйте в эту папку, чтобы затем добавить их в репозиторий, закоммитить и «запушить» на сервер для сдачи преподавателю.

Установка и подключение библиотеки

Для установки библиотеки следуйте инструкциям на pygame.org

Чтобы импортировать возможности библиотеки Pygame в вашей программе недостаточно одной инструкции import , нужны ещё некоторые дополнительные действия:

import pygame # После импорта библиотеки, необходимо её инициализировать: pygame.init() # И создать окно: screen = pygame.display.set_mode((300, 200)) # здесь будут рисоваться фигуры # . # после чего, чтобы они отобразились на экране, экран нужно обновить: pygame.display.update() # Эту же команду нужно будет повторять, если на экране происходят изменения. # Наконец, нужно создать основной цикл, в котором будут отслеживаться # происходящие события. # Пока единственное событие, которое нас интересует - выход из программы. while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() 

Помимо команды import pygame для более удобного доступа к функциям рисования, можно дополнительно прописать ещё одну строку импорта:

import pygame from pygame.draw import * 

Это позволит вместо pygame.draw.rect(. ) писать просто rect(. ) .

Также хорошей практикой является добавление небольшой задержки в главный цикл программы, чтобы не заставлять ее работать «вхолостую», постоянно считывая события, которых, скорее всего, нет. Для этого в pygame есть специальный модуль time . До начала главного цикла создаем объект Clock:

clock = pygame.time.Clock() 

После этого в главном цикле добавляем строку:

clock.tick(30) 

Здесь 30 — это максимальный FPS, быстрее которого программа работать не будет. Естественно, можно указать и любое другое значение (которое, кстати, есть смысл записать в отдельную переменную для легкого доступа).

Пример №1

Выведем простую картинку. Создайте файл 1_draw.py , скопируйте туда текст примера №1 и запустите.

import pygame from pygame.draw import * pygame.init() FPS = 30 screen = pygame.display.set_mode((400, 400)) rect(screen, (255, 0, 255), (100, 100, 200, 200)) rect(screen, (0, 0, 255), (100, 100, 200, 200), 5) polygon(screen, (255, 255, 0), [(100,100), (200,50), (300,100), (100,100)]) polygon(screen, (0, 0, 255), [(100,100), (200,50), (300,100), (100,100)], 5) circle(screen, (0, 255, 0), (200, 175), 50) circle(screen, (255, 255, 255), (200, 175), 50, 5) pygame.display.update() clock = pygame.time.Clock() finished = False while not finished: clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: finished = True pygame.quit() 
Пример №2

Для создания штриховок можно использовать циклы:

import pygame from pygame.draw import * pygame.init() FPS = 30 screen = pygame.display.set_mode((400, 400)) x1 = 100; y1 = 100 x2 = 300; y2 = 200 N = 10 color = (255, 255, 255) rect(screen, color, (x1, y1, x2 - x1, y2 - y1), 2) h = (x2 - x1) // (N + 1) x = x1 + h for i in range(N): line(screen, color, (x, y1), (x, y2)) x += h pygame.display.update() clock = pygame.time.Clock() finished = False while not finished: clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: finished = True pygame.quit() 

Все функции модуля pygame.draw в качестве первого аргумента принимают экран, на котором нужно рисовать (приложение может открывать и несколько окон, нужно точно знать, на каком рисовать). Второй аргумент — цвет, заданный кортежем из трех чисел от 0 до 255 в формате RGB. Также возможно наличие четвертого числа — прозрачности. После этого следуют координаты фигуры (для каждой фигуры свой формат задания координат), далее — параметр width . Если передать в этот параметр положительное значение, оно будет означать толщину линии. Если параметр равен 0 (значение по умолчанию), фигура будет полностью закрашеной. Полное описание функций модуля pygame.draw вы можете найти в официальной документации.

Задание №1 (пробное)

Первое задание-картинка одинаковое у всех студентов. Нарисовать злой смайлик:

Задание №2 (боевое)

Второе задание-картинка у всех студентов разное. Попросите преподавателя закрепить за вами одно из заданий. Возможно, вам будет выдано отдельное задание, не из этого списка.

Картинка Сложность
1_1.png
2_1.png
3_1.png
4_1.png
5_1.png
6_1.png
7_1.png
8_1.png
9_1.png
10_1.png
11_1.png
12_1.png
13_1.png
14_1.png
15_1.png
16_1.png
17_1.png

Важно! Результат вашей работы обязательно нужно отправить в свой репозиторий:

student@computer:~/$ cd infa_2020_ivanov student@computer:~/infa_2020_ivanov/$ git add lab3 student@computer:~/infa_2020_ivanov/$ git commit -m "Классная работа. Нарисовал. " # здесь можно написать подробности student@computer:~/infa_2020_ivanov/$ git push
Задание №3 (на дом)

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

Для скачивания репозитория на домашнем компьютере используйте команду git clone, а в дальнейшем для подтягивания изменений команду git pull.

Картинка Сложность
1_2.png
2_2.png
3_2.png
4_2.png
5_2.png
6_2.png
7_2.png
8_2.png
9_2.png
10_2.png
11_2.png
12_2.png
13_2.png
14_2.png
15_2.png
16_2.png
17_2.png

Важно! Результат вашей работы обязательно нужно отправить в свой репозиторий:

student@computer:~/$ cd infa_2020_ivanov student@computer:~/infa_2020_ivanov/$ git add lab3 student@computer:~/infa_2020_ivanov/$ git commit -m "Домашняя работа. Нарисовал. " # здесь можно написать подробности student@computer:~/infa_2020_ivanov/$ git push

Сайт построен с использованием Pelican. За основу оформления взята тема от Smashing Magazine. Исходные тексты программ, приведённые на этом сайте, распространяются под лицензией GPLv3, все остальные материалы сайта распространяются под лицензией CC-BY.

Chapter 11: Растровая графика и звук

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

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

11.1 Хранение программы в папке

fig.create_a_folder

Программы, рассмотренные до этого момента, представляли из себя лишь один .py файл. Добавляя картинки и звуки, появляется больше файлов, являющимися частями игры. Легко перемешать эти файлы с другими программами. Для предотвращения беспорядка будет правильным разместить более сложные программы в отдельные папки. Перед началом любого подобного проекта, щёлкните на кнопке “new folder” и используйте только что созданную папку как место размещения всех новых файлов.

11.2 Установка фонового изображения

fig.background_image

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

Любая картинка, используемая в игре должна быть такого размера, каким ей нужно быть показанной на экране. Не пытайтесь загрузить картинку 5000х5000 пикселей из камеры с большим разрешением в окне 800х600. Используйте программу для редактирования графики (подойдёт даже MS Paint) и измените размер картинки перед её использованием.

Загрузка картинки — простой процесс, требующий только одну строку кода. В этой строке кода много чего происходит, так что её объяснение будет разбито на три части. Следующая строка загрузит файл saturn_family1.jpg . Этот файл должен быть расположен там же, где и ваша новая python программа, иначе компьютер не сможет его найти.

pygame.image.load("saturn_family1.jpg")

Загрузка картинки не означает её отображение. Для того, чтобы можно было использовать эту картинку позднее, нам нужно задать значение переменной равное тому, что вернёт команда load() . В этом случае, будет создана новая переменная background_image . Этот вариант показан ниже:

background_image = pygame.image.load("saturn_family1.jpg")

Наконец, изображение нужно конвертировать в формат, с которым Pygame сможет легко работать. Для этого, мы добавляем .convert() в конце команды для вызова соответствующей функции. Все картинки должны быть загружены используя этот шаблон, меняя лишь имя переменной и имя файла.

background_image=pygame.image.load("saturn_family1.jpg").convert()

Загрузка изображения должна быть произведена до основного игрового цикла. Хотя вполне возможно загрузить картинку во время главного игрового цикла, это заставит программу загружать картинку с диска примерно 20 раз в секунду. Это абсолютно не нужно. Картинку нужно загрузить лишь раз, в начале работы программы.

Для отображения картинки, программа использует команду blit() . Это “переносит” биты на экран. Мы однажды уже использовали эту команду для вывода текста на игровой экран.

После вызова команды blit , ей передаётся переменная, содержащая картинку, а также значения или переменная, содержащая начальную верхнюю левую кординату картинки. Эта команда должна быть вызвана внутри цикла, чтобы картинка перерисовывалась в каждом кадре:

screen.blit(background_image, [0,0])

Этот код переносит картинку, сохранённую в background_image на экран в координатах (0,0).

11.3 Передвижение картинки

fig.player_image

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

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

player_image = pygame.image.load("player.png").convert()

Внутри главного цикла программы, достаются координаты мыши, а затем передаются в другую функцию blit как координаты для рисования картинки:

# Достать текущую позицию мыши. # Это вернёт позицию как список из двух номеров. player_position = pygame.mouse.get_pos() x=player_position[0] y=player_position[1] # Скопировать картинку на экран: screen.blit(player_image, [x,y])

fig.nontrans_background

Появляется проблема. Картинка, красный крест с белым фоном, рисутеся следующим образом:

Нам же нужен только красный крест. Хотя картинки являются прямоугольниками, нам иногда нужна абсолютно другая форма. Чтобы обойти это ограничение, нужно сказать программе, чтобы она считала один цвет “прозрачным”, таким образом не отображая его. Это можно сделать сразу же после загрузки. Следующий пример делает белый цвет (предполагая, что white уже задана как переменная) прозрачным:

player_image.set_colorkey(white)

fig.jpeg_artifacts

Это сработает с большим количеством файлов с расширениями .gif и .png. Это не будет так хорошо работать с большинством .jpg файлов. Формат jpeg отлично подходит для хранения фотографий, но он незаметно меняет картинку для уменьшения её размера. Это значит, что не весь цвет фона будет одинаковым. Нижеприведённая картинка с красным крестом была сохранена как jpeg. Белый цвет вокруг креста — не совсем (255,255,255), а просто очень близок к белому.

11.4 Звуки

Этот раздел использует звук щелчка, который быть может скачан с помощью нажатия правой кнопки мыши здесь и выбора “save link as” (или “save target as”, в зависимости от того, как это пишется в вашем браузере)

Так же как и картинки, звуки должны быть загружены перед использованием. Это должно быть проделано только один раз, до главного цикла программы. Следующая команда загружает звуковой файл и создаёт переменную click_sound для того, чтобы ссылаться на него:

click_sound = pygame.mixer.Sound("click.wav")

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

for event in pygame.event.get(): if event.type == pygame.QUIT: done=True if event.type == pygame.MOUSEBUTTONDOWN: click_sound.play()

Pygame не сможет проигрывать все .wav файлы, которые можно найти в интернете. Если бесплатная программа VLC Media Player не сможет проиграть звук, то не сможет это сделать и Pygame.

11.5 Полный код

""" Sample Python/Pygame Programs Simpson College Computer Science http://programarcadegames.com/ http://simpson.edu/computer-science/ Explanation video: http://youtu.be/4YqIKncMJNs Explanation video: http://youtu.be/ONAK8VZIcI4 Explanation video: http://youtu.be/_6c4o41BIms """ import pygame # Define some colors WHITE = (255, 255, 255) BLACK = (0, 0, 0) # Call this function so the Pygame library can initialize itself pygame.init() # Create an 800x600 sized screen screen = pygame.display.set_mode([800, 600]) # This sets the name of the window pygame.display.set_caption('CMSC 150 is cool') clock = pygame.time.Clock() # Before the loop, load the sounds: click_sound = pygame.mixer.Sound("laser5.ogg") # Set positions of graphics background_position = [0, 0] # Load and set up graphics. background_image = pygame.image.load("saturn_family1.jpg").convert() player_image = pygame.image.load("playerShip1_orange.png").convert() player_image.set_colorkey(BLACK) done = False while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True elif event.type == pygame.MOUSEBUTTONDOWN: click_sound.play() # Copy image to screen: screen.blit(background_image, background_position) # Get the current mouse position. This returns the position # as a list of two numbers. player_position = pygame.mouse.get_pos() x = player_position[0] y = player_position[1] # Copy image to screen: screen.blit(player_image, [x, y]) pygame.display.flip() clock.tick(60) pygame.quit()

11.6 Проверка пройденного

def f(): return 10 x=f() print (x)
def f(x): x=x+10 return x x=10 f(x) print (x)
def f(x): x=x+10 return x def g(x): return x*2 print ( f( g(10) ) )
def f(x): x=x+10 return x def g(x): return x*2 print ( g( f(10) ) )
def f(x,y): return x/y x=20 y=5 print ( f(y,x) )
def f(x): return x*2 def g(x): return x-2 def h(x): return x+10 print ( f(5) + g(f(5)) + h(g(10)) ) print ( h(g(f(10))) )
x=len( [2,3,[5,6],[7,9]] print (x)

You are not logged in. Log in here and track your progress.

Copyright © 2017
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin

Не загружается картинка спрайта в pygame

Если указать полный путь: r’C:\Users\user\Desktop\pusheen-cat-pixel-art-image-vector-graphics-pusheen-drawings.jpg’ :

 File "C:\Users\user\PycharmProjects\Cat&Milk\Cat&Milk.py", line 11, in sprite_foto = pygame.image.load(os.path.join(kartinka,r'C:\Users\lolo\Desktop\pusheen-cat-pixel-art-image-vector-graphics-pusheen-drawings.jpg')).convert() pygame.error: cannot convert without pygame.display initialized 

Необходимо исправить ошибку и запустить pygame с спрайтом с картинкой

Обработка ввода и анимации¶

Взаимодействие пользователя с компьютером основано на событиях, любые действия производимые пользователем порождают события — движение мыши, нажатия клавиш, специальных кнопок. Внутри библиотеки PyGame есть инструменты для обратки событий, которые происходят внутри приложений.

Мы с вами уже знакомы с методом получения всех произошедших событий — pygame.event.get() , который возвращает события, произошедшие с последнего обращения.

Помимо событий выхода из приложения pygame.QUIT , есть множество других — например, нажатия клавиш pygame.KEYDOWN или отпускания pygame.KEYUP .

Рассмотрим взаимодействие с событиями на примере небольшой программы, в которой по нажатию клавиш показывается квадрат:

import sys import pygame pygame.init() screen = pygame.display.set_mode((640, 480)) rect = pygame.Rect(40, 40, 120, 120) color = (0, 0, 0) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: color = (255, 255, 255) pygame.draw.rect(screen, color, rect, 0) pygame.display.flip() 

В данном блоке программа занимется обработкой нажатия клавиш. Сначала мы получаем список всех событий, после чего начинаем последовательно проверять их. Если одно из событий соответствует сигналу к завершению программы, закрываем окно. Если же это нажатие клавиши — перекрашиваем прямоугольник в белый цвет.

При нажатии клавиш

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

При нажатии кнопки закрытия программы

При движении мыши

Обработка нажатий клавиш¶

Когда мы нажимаем клавишу, в систему передаётся не только информация о том, что какая-то кнопка нажата, но и её код.

  1. pygame.event.get()
  2. pygame.key.get_pressed()

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

keys = pygame.key.get_pressed() if keys[pygame.K_RETURN]: print("Нажата клавиша enter") 

Перемещение объектов¶

Умея получать от пользователя ввод, мы можем реализовать движения наших фигур на экране:

import sys import pygame pygame.init() screen = pygame.display.set_mode((640, 480)) rect = pygame.Rect(40, 40, 120, 120) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: rect.move_ip(-40, 0) elif event.key == pygame.K_RIGHT: rect.move_ip(40, 0) elif event.key == pygame.K_UP: rect.move_ip(0, -40) elif event.key == pygame.K_DOWN: rect.move_ip(0, 40) pygame.draw.rect(screen, (255, 0, 0), rect, 0) pygame.display.flip() 

Для движения объектов используются методы move() и move_ip() , которыми обладают объекты, созданные с помощью функций из pygame.draw . Первый создаёт новую фигуру такого же типа, находящуюся по заданному смещению, второй непосредственно изменяет положение имеющейся фигуры.

Запустив данный код, вы можете заметить, что при перемещении фигуры от неё остаётся “след”. Это связано с тем, что при перемещении объекта, мы его не перемещаем на экране, а рисуем на новом месте поверх старого кадра.

Чтобы избежать данной проблемы, надо добавить вызов метода fill() у нашего экрана, на котором мы рисуем и передать ему цвет, которым надо закрасить фон. Данное действие надо проводить каждый раз перед отрисовкой кадра:

# здесь могла быть ваша проверка событий screen.fill((0, 0, 0)) pygame.draw.rect(screen, (255, 0, 0), rect, 0) pygame.display.flip() 

Использование спрайтов¶

Спрайт — двумерное изображение, используемое в играх.

pygame.image. load ( path ) ¶

Функция для загрузки спрайта из картинки. Path — путь до изображения, возвращает объект типа Surface, который можно использовать для рисования.

Для отрисовки спрайта на экране надо вызвать метод blit() у поверхности на которой производится отрисовка и передать объект спрайта вместе с координатами на которых необходимо отрисовать:

screen = pygame.display.set_mode((640, 480)) sprite = pygame.image.load("sprite.png") screen.blit(sprite, (20, 20)) pygame.quit() 

Анимации¶

В pygame анимации создаются при помощи набора спрайтов, которые последовательно отрисовываются:

animation_set = [pygame.image.load(f"ri>.png") for i in range(1, 6)] window = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() i = 0 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() window.fill((0,0,0)) window.blit(animation_set[i // 12], (100, 20)) i += 1 if i == 60: i = 0 pygame.display.flip() clock.tick(60) 

Создаём список спрайтов, каждый из которых будет отдельным кадром анимации:

animation_set = [pygame.image.load(f"ri>.png") for i in range(1, 6)] 

Создаём часы, для ограничения количества кадров в секунду:

clock = pygame.time.Clock() 

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

i = 0 

Выбор анимации в зависимости от номера кадра и его отрисовка:

window.blit(animation_set[i // 12], (100, 20)) 

Изменение переменной, помогающей выбрать нужный кадр:

i += 1 if i == 60: i = 0 

Ограничение количества кадров в секунду, благодаря чему становится проще просчитывать анимации и синхронизировать события:

clock.tick(60) 

Задания¶

  1. Написать программу, которая будет писать в консоль названия нажатых клавиш. Реализовать поддержку enter, space, w, a, s, d, esc.
  2. С помощью циклов, используя квадрат 10х10 пикселей и его след, нарисовать рамку 100х100 пикселей.
  3. Написать программу, в которой по нажатию клавиш будет двигаться квадрат размером 20х20 пикселей. Учесть, что квадрат не должен выходить за границы экрана.
  4. Доработать программу, чтобы квадрат при каждом движении менял свой цвет на случайный.
  5. Реализовать анимацию движения персонажа. При движении влево или вправо должны показываться соответствующие анимации. Кадры для них взять из архива animations.zip

© Copyright Revision d00c0df4 .

Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: latest

Versions latest Downloads html On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *